14. Pour faire durer le plaisir!
Extraire seulement les caractères de 5 à 7
Extraire les caractères à partir de 5
Savoir si une condition est vraie ou fausse?
Est-ce que le contenu des valeurs correspond à “2019-01-01”
Connaître la longueur des valeurs d’une colonne
Compter le nombre de mots dans des cellules (séparés par des espaces)
- value.split(" ").length() ou value.split(//).length()
Calcul d’un pourcentage arrondi (ex d’un résultat sur 10)
Transformer un format date en format texte plus lisible
- value.toString(“dd MMMM yyyy”)
La création et manipulation de listes (array) - Diviser le contenu de cellules
Diviser le contenu de cellules en fonction d’un séparateur pour ne conserver que le premier élément
Diviser le contenu d’une cellules pour les réordonner
value.split(“,”).reverse().join(“,”)
value.split(“,”).sort().join(“,”)
Diviser après les 3 premiers caractères et conserve le premier élément
- value.splitByLengths(3)[0]
Diviser selon le type de caractères et retenir le deuxième élément
- value.splitByCharType()[1]
Diviser le contenu d’une cellule sur un terme x et conserver le contenu précédent
Inverser le contenu d’une cellule
Diviser le contenu d’une cellule et inverser l’ordre de présentation en ajoutant une virgule entre les deux
- value.split(’ ‘)[1] + “,” + " " + value.split(’ ’)[0]
OU
- value.match(/(.),(.)/).reverse().join(" ")
Ajouter un zéro pour avoir un nombre de caractères précis
Ajouter un zéro devant le contenu si donne une chaine de 0 à 2 caractères
- “0”[0,2-length(value)] + value
Appliquer des conditions
Fonction if - même chose que dans excel
- if(test, si text est vrai, si text est vrai)
Si la cellule contient x, écrire x, sinon y
if(value.contains(“x”), “x”, “y”)
if(value.contains(“1”), value, null)
Comparer deux colonnes
Identifier si le contenu des cellules d’une colonne est pareil à une autre
- value == cells[‘autre-colonne’].value
Est-ce que le premier caractère de la colonne x est le même que la colonne y
- cells[“colonne1”].value[0] == cells[“colonne2”].value[0]
Comparer le contenu de deux colonnes et modifier les valeurs selon le résultat de la condition
- if(cells[“colonne1”].value == cells[“colonne2”].value, “Pareil”, “Pas pareil”)
Faire des calculs simples (valeurs numériques)
Somme d’une colonne plus une autre
- value + cells[‘Jour du mois’].value
Arrondir le contenu
Reprendre et concaténer le contenu d’une autre colonne
Créer une nouvelle colonne en fusionnant le contenu de deux autres et ajouter du texte
- cells[‘nom’].value + cells[‘nom’].value + “Bonjour!”
Créer une nouvelle colonne avec les trois premiers caractères seulement
cells[‘Symptome’].value[0,3]
Transformer le contenu d’une colonne en concaténant le contenu d’une autre
value + ’ ’ + cells[‘street-type’].value
Remplacer des caractères
Remplacer tout le contenu d’une colonne (ici, vider la colonne)
Remplacer une lettre par une autre
- value.replaceChars(“o”, “a”)
Faire plusieurs remplacements d’un coup
- value.replace(“1”, “un”).replace(“2”, “deux”).replace(“3”, “trois”)
Identifier des cellules qui commencent par… (résultat booléen)
- value.startsWith(“Berri”)
Supprimer un caractère de début ou fin de valeur:
Supprime “S” du début de la cellule
- value.replace(/^S/,"") [regex ^ indique le début d’une cellule]
Supprime “.” à la fin de la cellule
- value.replace(/.$/,"") [regex $ indique la fin d’une cellule]
Extraire seulement une partie d’une date
value.toDate().datePart(“year”)
diff(now(),value,‘weeks’)
LS0tDQp0aXRsZTogIk9wZW5SZWZpbmUiDQphdXRob3I6ICJDYXJvbGluZSBQYXRlbmF1ZGU8L2JyPkJpYmxpb3Row6hxdWUgZGVzIGxldHRyZXMgZXQgc2NpZW5jZXMgaHVtYWluZXMsIFVuaXZlcnNpdMOpIGRlIE1vbnRyw6lhbDwvYnI+Y2Fyb2xpbmUucGF0ZW5hdWRlQHVtb250cmVhbC5jYSINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgcm1kZm9ybWF0czo6cm9ib2Jvb2s6DQogICAgc2VsZl9jb250YWluZWQ6IHRydWUNCiAgICBoaWdobGlnaHQ6IGthdGUNCiAgICB0aHVtYm5haWxzOiBmYWxzZQ0KICAgIGxpZ2h0Ym94OiB0cnVlDQogICAgZ2FsbGVyeTogdHJ1ZQ0KICAgIHRvY19kZXB0aDogMg0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICBtYXRoamF4OiBudWxsDQogICAgZGZfcHJpbnQ6IHBhZ2VkDQotLS0NCg0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJtZGZvcm1hdHMpDQoNCiMjIEdsb2JhbCBvcHRpb25zDQpvcHRpb25zKG1heC5wcmludD0iNzUiKQ0Kb3B0c19jaHVuayRzZXQoZWNobz1GQUxTRSwNCgkgICAgICAgICAgICAgY2FjaGU9VFJVRSwNCiAgICAgICAgICAgICAgIHByb21wdD1GQUxTRSwNCiAgICAgICAgICAgICAgIHRpZHk9VFJVRSwNCiAgICAgICAgICAgICAgIGNvbW1lbnQ9TkEsDQogICAgICAgICAgICAgICBtZXNzYWdlPUZBTFNFLA0KICAgICAgICAgICAgICAgd2FybmluZz1GQUxTRSkNCm9wdHNfa25pdCRzZXQod2lkdGg9NzUpDQpgYGANCg0KDQoNCiFbXShpbWFnZXMvT1ItbG9nby5qcGcpIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyBPYmplY3RpZnMNCg0KPGRpdiBjbGFzcyA9ICJyaWdodCI+DQo8aW1nIHNyYz0iaW1hZ2VzL09SMTYuanBnIiB3aWR0aD0iMjUwcHgiIC8+DQo8L2Rpdj4NCg0KLSBDb21wcmVuZHJlIGxlIGZvbmN0aW9ubmVtZW50IGR1IGxvZ2ljaWVsLg0KLSBJbXBvcnRlciBldCBleHBsb3JlciB1biBqZXUgZGUgZG9ubsOpZXMuIA0KLSBNYW5pcHVsZXIgZXQgdHJhbnNmb3JtZXIgZGVzIGRvbm7DqWVzLg0KLSBTJ2luaXRpZXIgw6AgbCd1c2FnZSBkdSBsYW5nYWdlIEdSRUwuDQo8L2JyPg0KPC9icj4NCjwvYnI+DQo8L2JyPg0KPC9icj4NCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDEuIFByw6lsaW1pbmFpcmVzDQojIyBEZXMgZG9ubsOpZXMgYmllbiBvcmRvbm7DqWVzIGNvbW1lbmNlbnQgcGFyIHNvaS1tw6ptZSENCg0KDQotIExlIG5ldHRveWFnZSBkZSBmaWNoaWVycyBkZSBkb25uw6llcyBlc3QgdW5lIHTDomNoZSBzb3V2ZW50IGxvbmd1ZSBldCBlbm51eWV1c2UgbWFpcyBpbmNvbnRvdXJuYWJsZSBhdmFudCB0b3V0ZSBhbmFseXNlIG91IGRpZmZ1c2lvbiBkZSBkb25uw6llcy4NCg0KLSBMJ2FtcGxldXIgZGUgY2V0dGUgdMOiY2hlIGTDqXBlbmRyYSBkZSBsJ8OpdGF0IGRlcyBkb25uw6llcyBldCBkdSB0eXBlIGRlIGxvZ2ljaWVsIHF1aSBzZXJhIGVuc3VpdGUgdXRpbGlzw6kgw6AgZGVzIGZpbnMgZCdhbmFseXNlIG91IGRlIHZpc3VhbGlzYXRpb24gKFIsIFNQU1MsIFN0YXRhLCBUYWJsZWF1LCBBcmNHSVMuLi4pDQoNCjwvYnI+DQoNCiMjIyMgUHJvYmzDqG1lcyBjb3VyYW50cyByZWxhdGlmcyDDoCBsYSBmb3JtZSBldC9vdSBhdSBjb250ZW51IGQndW4gamV1IGRlIGRvbm7DqWVzOg0KDQotIFByb2Jsw6htZXMgZCdlbnTDqnRlcyBldCBkZSBub21zIGRlIHZhcmlhYmxlcy4NCi0gQ2VsbHVsZXMgZnVzaW9ubsOpZXMsIHF1aSBjb250aWVubmVudCBkaWZmw6lyZW50ZXMgaW5mb3JtYXRpb25zLg0KLSBWYXJpYWJsZXMgcXVpIG5lIHNvbnQgcGFzIGNsYWlyZW1lbnQgZMOpZmluaWVzIMOgIGxhIHZlcnRpY2FsZS4NCi0gQ29udGVudSB0ZXh0dWVsIG5vbiBzdHJ1Y3R1csOpLg0KLSBQcm9ibMOobWVzIGRlIGZvcm1hdHMsIGRlICJwZXRpdHMgY2FyYWN0w6hyZXMiIC0+IHPDqXBhcmF0ZXVycy9kw6lsaW1pdGV1cnMgZGUgY29udGVudSBldCBkZSBjb2xvbm5lcywgZ3VpbGxlbWV0cywgZW5jb2RhZ2UgKCcnICB8fCB8ICIiICwgLiA7ICkNCi0gUHLDqXNlbmNlIGRlIGNlbGx1bGVzIHZpZGVzLCBlc3BhY2VzLi4uDQoNCltBIGNhc2Ugc3R1ZHkgaW4gbWVzc3kgZGF0YSBhbmFseXNpczogdGhlIEF1c3RyYWxpYW4gc2FtZS1zZXggbWFycmlhZ2Ugc3VydmV5XShodHRwczovL2Jsb2cucmV2b2x1dGlvbmFuYWx5dGljcy5jb20vMjAxNy8xMi9zZXgtbWFycmlhZ2Utc3VydmV5Lmh0bWwpDQoNCjxjZW50ZXI+DQoNCiFbXShpbWFnZXMvT1I5LmpwZyl7d2lkdGg9NjAlfSAgDQoNCjwvY2VudGVyPg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KQXZhbnQgZCd1dGlsaXNlciBzZXMgZG9ubsOpZXMgZGFucyBsZSBsb2dpY2llbCBkZSBzb24gY2hvaXgsIGxlIG5ldHRveWFnZSBkZSBzZXMgZG9ubsOpZXMgcGV1dCBkb25jIGluY2x1cmUgZGUgbm9tYnJldXNlcyB0w6JjaGVzIGNvbW1lOg0KDQo8ZGl2IGNsYXNzID0gInJpZ2h0Ij4NCjxpbWcgc3JjPSJpbWFnZXMvYm90dGxlLnBuZyIgd2lkdGg9IjE3NXB4IiAvPg0KPC9kaXY+DQotIE1vZGlmaWVyIGwnZW5jb2RhZ2UuDQotIFN1cHByaW1lciBsZXMgZG91YmxvbnMuDQotIERpdmlzZXIgbGVzIGNlbGx1bGVzIGNvbXBvc8OpZXMgZGUgdmFsZXVycyBtdWx0aXBsZXMuICAgDQotIFJlY29kZXIgbGVzIHZhbGV1cnMgbWFucXVhbnRlcy4NCi0gUmVww6lyZXIgbGVzIGVycmV1cnMgZGUgc2Fpc2llLCBsZXMgdmFsZXVycyBhYmVycmFudGVzLi4uDQotIEZ1c2lvbm5lciBkZXMgZmljaGllcnMuDQotIEZ1c2lvbm5lciBkZXMgY29sb25uZXMuDQotIEFncsOpZ2VyIGRlcyB2YWxldXJzIGRlIHZhcmlhYmxlcy4NCi0gQ3LDqWVyIGRlcyB2YXJpYWJsZXMuDQotIENoYW5nZXIgbGUgZm9ybWF0IGRlcyB2YXJpYWJsZXMuDQotIENoYW5nZXIgbGUgZm9ybWF0IGR1IGZpY2hpZXIuDQotIFRyYW5zZm9ybWVyIGxlcyBjb2xvbm5lcyBlbiByYW5nw6llcyAoZm9ybWF0ICJ3aWRlIiBlbiAibG9uZyIpLg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyAyLiBQb3VycXVvaSBPcGVuUmVmaW5lPw0KDQotIFBsdXNpZXVycyBsYW5nYWdlcyBkZSBwcm9ncmFtbWF0aW9uIGV0IG91dGlscyBkJ2FuYWx5c2Ugb3UgZGUgZ2VzdGlvbiBkZSBkb25uw6llcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcywgbWFpcyBPcGVuUmVmaW5lIGEgw6l0w6kgY3LDqcOpIHNww6ljaWZpcXVlbWVudCBwb3VyIGZhaXJlIGxlIG3DqW5hZ2UhDQoNCi0gUGx1cyBmYWNpbGUgcXVlIFIgZXQgcGx1cyBlZmZpY2FjZSBxdSdFeGNlbC4NCg0KLSBQZXJtZXQgZGUgZmFjaWxlbWVudCBpZGVudGlmaWVyIGV0IGRlIGNvcnJpZ2VyIGVuIGxvdCBkZXMgZG9ubsOpZXMgaW5jb21wbMOodGVzLCBtYW5xdWFudGVzLCBlcnJvbsOpZXMsIGluY29ow6lyZW50ZXMsIG5vbiBwZXJ0aW5lbnRlcywgbWFsIGZvcm1hdMOpcywgcXUnZWxsZXMgc29pZW50IG51bcOpcmlxdWVzIG91IHRleHR1ZWxsZXMgPT4gc2F1dmUgdGVtcHMgZXQgw6luZXJnaWUuDQoNCg0KPGNlbnRlcj4gICANCg0KPGltZyBzcmM9ImltYWdlcy8xOTE4LUFkLTg2MC04NjB4NTczLmpwZyIgd2lkdGg9IjYwJSIvPg0KDQo8L2NlbnRlcj4gICANCg0KDQo8L2JyPg0KDQojIyMgRm9uY3Rpb25zIHNww6ljaWFsaXPDqWVzIHBvdXI6DQoNCi0gKkV4cGxvcmVyKiBzZXMgZG9ubsOpZXMgc291cyB0b3VzIHNlcyBhbmdsZXMgKGdyw6JjZSDDoCBkZXMgZmlsdHJlcywgdHJpcywgZmFjZXR0ZXMsIHJlZ3JvdXBlbWVudHMpLiAgIA0KLSAqTmV0dG95ZXIqIDogcmVww6lyZXIgZGVzIGVycmV1cnMsIG1vZGlmaWVyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzLi4uDQotICpUcmFuZm9ybWVyKiA6IGNoYW5nZXIgZm9ybWF0cyBkZSBzZXMgdmFyaWFibGVzLCBjcsOpZXIgZGUgbm91dmVsbGVzIHZhcmlhYmxlcyBzdXIgbGEgYmFzZSBkZXMgY29sb25uZXMgcHLDqXNlbnRlcy4uLg0KLSAqRW5yaWNoaXIqIDogZnVzaW9ubmVyIGRlcyBmaWNoaWVycywgaW1wb3J0ZXIgZGVzIGRvbm7DqWVzIGVuIGxpZ25lIChBUEksIFVSTHMpLCByw6ljb25jaWxpYXRpb24gKFdpa2lkYXRhIGV0IFthdXRyZXMgc291cmNlcyBleHRlcm5lc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL1JlY29uY2lsYWJsZS1EYXRhLVNvdXJjZXMpKS4uLg0KLSAqQXV0b21hdGlzZXIqIChyw6l1dGlsaXNlciBzb24gaGlzdG9yaXF1ZSBkZSBtYW5pcHVsYXRpb25zKQ0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgMi4xLiBFeGVtcGxlcyBkJ3V0aWxpc2F0aW9uDQoNCkhhcm1vbmlzZXIsIHN0YW5kYXJkaXNlciwgdW5pZm9ybWlzZXIuLi4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SOC5qcGcpICAgDQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAyLjIuIFBvdXIgYXZvaXIgZGUgYmVsbGVzIGRvbm7DqWVzICp0aWR5Kg0KDQpQZXJtZXQgZCdhcHBsaXF1ZXIgbGVzIHByaW5jaXBlcyBkdSBbVGlkeWRhdGFdKGh0dHBzOi8vcjRkcy5oYWQuY28ubnovdGlkeS1kYXRhLmh0bWwpIA0KDQo+IOKAnFRpZHkgZGF0YXNldHMgYXJlIGFsbCBhbGlrZSwgYnV0IGV2ZXJ5IG1lc3N5IGRhdGFzZXQgaXMgbWVzc3kgaW4gaXRzIG93biB3YXku4oCdIOKAk+KAkyBIYWRsZXkgV2lja2hhbQ0KDQo8L2JyPg0KDQoqKlRyb2lzIHByaW5jaXBlcyBkZSBiYXNlOioqDQoNCjEuIENoYXF1ZSBjb2xvbm5lIGVzdCB1bmUgKip2YXJpYWJsZSoqLg0KMi4gQ2hhcXVlIGxpZ25lIGVzdCB1bmUgKipvYnNlcnZhdGlvbioqLg0KMy4gQ2hhcXVlIGNlbGx1bGUgw6AgKip1bmUgc2V1bGUgdmFsZXVyKiouDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjEwLmpwZykgDQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAyLjMuICBQcmluY2lwYWxlcyBjYXJhY3TDqXJpc3RpcXVlcw0KDQotIExvZ2ljaWVsIGdyYXR1aXQgZXQgb3V2ZXJ0IHV0aWxpc8OpIHBhciB1bmUgbGFyZ2UgY29tbXVuYXV0w6kuDQoNCi0gQ3LDqcOpIGVuIDIwMTAgKCpGcmVlYmFzZSBHcmlkd29ya3MqKSwgcmFjaGV0w6kgcGFyIEdvb2dsZSBlbiAyMDEwICgqR29vZ2xlIFJlZmluZSopLCBwdWlzIG91dmVydHVyZSBkdSBjb2RlIGVuIDIwMTIgZXQgcmVwcmlzIHBhciBjb21tdW5hdXTDqSBxdWkgbGUgZMOpcGxhY2Ugc3VyIEdpdGh1YiBldCBkZXZpZW50ICpPcGVuUmVmaW5lKi4NCg0KLSBNdWx0aXBsYXRlZm9ybWVzOiBXaW5kb3dzLCBNYWMsIExpbnV4Lg0KDQotIEludGVyZmFjZSBzZW1ibGFibGUgw6AgdW4gdGFibGV1ciBjb21tZSBFeGNlbCwgbWFpcyBkb250IGxlIGZvbmN0aW9ubmVtZW50IHMnYXBwYXJlbnRlIHBsdXMgw6AgdW5lIGJhc2UgZGUgZG9ubsOpZXMgKHBhciBleGVtcGxlIGxlcyB0cmFpdGVtZW50cyBzb250IHPDqXBhcsOpcyBkZXMgZG9ubsOpZXMsIGllIGxlcyBmb3JtdWxlcyBuZSBzb250IHBhcyBlbnJlZ2lzdHLDqWVzIGRhbnMgbGVzIGNlbGx1bGVzIG1haXMgZGFucyB1biBzY3JpcHQpLg0KDQotIEFzc29jaWUgbGEgZmFjaWxpdMOpIGQndXNhZ2UgZCd1biBsb2dpY2llbCBjb21tZSBFeGNlbCDDoCBsYSBwdWlzc2FuY2UgZCdvdXRpbHMgZGUgcHJvZ3JhbW1hdGlvbiBldCBkJ2FsZ29yaXRobWVzLg0KDQotIFVzYWdlIGRlIGwnKippbnRlcmZhY2UgZ3JhcGhpcXVlKiogZXQvb3UgKipzY3JpcHRzIEdSRUwqKiAoKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSopOiBwcm9wb3NlIHVuIGVuc2VtYmxlIGRlIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGRvbmMgbmUgbsOpY2Vzc2l0ZSDDoCBsYSBiYXNlIGF1Y3VuZSBjb21ww6l0ZW5jZSBlbiBwcm9ncmFtbWF0aW9uIG91IGFuYWx5c2UsIG1haXMgbCd1c2FnZSBkdSBsYW5nYWdlIHBlcm1ldCBkJ2FsbGVyIGJlYXVjb3VwIHBsdXMgbG9pbi4NCg0KLSBQYXJ0aWN1bGnDqHJlbWVudCBwdWlzc2FudCBwb3VyIGxlIG5ldHRveWFnZSBkZSB0YWJsZSBkZSBkb25uw6llcyBhdmVjIGR1IGNvbnRlbnUgdGV4dHVlbC4NCg0KLSAqKlJlcHJvZHVjdGliaWxpdMOpKiohIFBlcm1ldCBkZSBnYXJkZXIgdW4gaGlzdG9yaXF1ZSBkZSB0b3V0ZXMgbGVzIG1hbmlwdWxhdGlvbnMgZWZmZWN0dcOpZXMgc3VyIHNlcyBkb25uw6llcyBhZmluIGRlIGxlcyBwYXJ0YWdlciwgZGUgbGVzIHLDqXV0aWxpc2VyIHN1ciBkJ2F1dHJlcyBkb25uw6llcy4uLg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KDQoqKsOAIG5vdGVyKiogDQoNCk9wZW5SZWZpbmUgbidlc3QgcGFzIHVuIG91dGlsIGQnYW5hbHlzZSBvdSBkZSB2aXN1YWxpc2F0aW9uIGV0IG5lIHBlcm1ldCBwYXMgZGUgY3LDqWVyIHVuIGpldSBkZSBkb25uw6llcyDDoCBwYXJ0aXIgZGUgesOpcm8uIENlIG4nZXN0IHBhcyB1biBvdXRpbCBkZSByZW1wbGFjZW1lbnQgbWFpcyBjb21wbMOpbWVudGFpcmUuDQoNCjwvZGl2Pg0KDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDMuIEluc3RhbGxhdGlvbiBldCBmb25jdGlvbm5lbWVudCBnw6luw6lyYWwNCg0KLSBbVMOpbMOpY2hhcmdlciBldCBkw6l6aXBwZXJdKGh0dHBzOi8vb3BlbnJlZmluZS5vcmcvZG93bmxvYWQuaHRtbCkgbGUgbG9naWNpZWwgZGFucyB1biBkb3NzaWVyIGRlIHNvbiBjaG9peC4NCg0KLSBDcsOpw6kgZW4gbGFuZ2FnZSBKYXZhIFtkb25jIG7DqWNlc3NpdGUgbCdpbnN0YWxsYXRpb24gZGUgSmF2YSAoNjQgYml0cyBkZSBwcsOpZsOpcmVuY2UpXShodHRwczovL3d3dy5qYXZhLmNvbS9lbi9kb3dubG9hZC8pLg0KDQotIE5hdmlnYXRldXJzIMOgIHByaXZpbMOpZ2llcjogQ2hyb21lLCBPcGVyYSwgRWRnZS4gRmlyZWZveCBwZXV0IHBvc2VyIHByb2Jsw6htZSAobmUgZm9uY3Rpb25uZSBwYXMgZGFucyBJRSkuICANCg0KLSBMZSBmb25jdGlvbm5lbWVudCBkJ09wZW5SZWZpbmUgcGV1dCDDqnRyZSB1biBwZXUgZMOpcm91dGFudCBhdSBkw6lwYXJ0IGNhciBpbCBuJ3kgYSBwYXMgZCdpbnN0YWxsYXRpb24gZW4gYm9ubmUgZXQgZHVlIGZvcm1lIGNvbW1lIHBvdXIgdW4gbG9naWNpZWwgcsOpZ3VsaWVyLg0KDQotIFBvdXIgZMOpbWFycmVyIGxlIGxvZ2ljaWVsLCBjbGlxdWVyIHN1ciBsZSBmaWNoaWVyIGBgIGBvcGVucmVmaW5lLmV4ZWAgYGAgb3UgYHJlZmluZS5iYXRgLiBJbCBlc3QgdXRpbGUgZGUgZmFpcmUgdW4gY2xpYy1kcm9pdCBzdXIgbGUgZmljaGllciAuZXhlIHBvdXIgbCfDqXBpbmdsZXIgZGFucyBzYSBiYXJyZSBkZSB0w6JjaGVzIChzdXIgTWFjLCBkw6lwbGFjZXIgbCdpY8O0bmUgT3BlblJlZmluZSBkYW5zIGxlIGRvc3NpZXIgZCdhcHBsaWNhdGlvbnMgZXQgZG91YmxlIGNsaXF1ZXIgc3VyIGNlbGxlLWNpKS4NCg0KLSBVbmUgZmVuw6p0cmUgZGUgY29tbWFuZGUgbm9pcmUgcydvdXZyaXJhIGV0IGxhbmNlcmEgbCdvdXZlcnR1cmUgZCd1biBvbmdsZXQgZGFucyBsZSBuYXZpZ2F0ZXVyIHdlYi4gIA0KDQotIExhIGZlbsOqdHJlIGRlIGNvbW1hbmRlcyBwZXV0IGVuc3VpdGUgw6p0cmUgaWdub3LDqWUgbWFpcyBORSBQQVMgTEEgRkVSTUVSISBFbGxlIG5lIHNlcnZpcmEgcXUnw6AgZmVybWVyIGxhIHNlc3Npb24gZGUgdHJhdmFpbC4gIA0KDQotIFNpIGxlIG5hdmlnYXRldXIgbmUgcydvdXZyZSBwYXMgYXV0b21hdGlxdWVtZW50LCBzYWlzaXIgbCdhZHJlc3NlIGh0dHA6Ly8xMjcuMC4wLjE6MzMzMy8gb3UgaHR0cDovL2xvY2FsaG9zdDozMzMzIGRhbnMgdW4gb25nbGV0LiANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTcuanBnKXt3aWR0aD04MCV9DQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAzLjEuIFRyYXZhaWwgbG9jYWwNCg0KLSBSZXBvc2UgZG9uYyBzdXIgZGV1eCBjb21wb3NhbnRlczogdW4gKipzZXJ2ZXVyIHdlYiBsb2NhbCoqIGV0IHVuICoqb25nbGV0IGRlIG5hdmlnYXRldXIgd2ViKiogcG9pbnRhbnQgdmVycyBsJ2FkcmVzc2UgZHUgc2VydmV1ciBzdXIgc29uIHBvc3RlLg0KDQotIExlIHRyYXZhaWwgc2UgZmFpdCBkYW5zIHVuIG9uZ2xldCBkZSBuYXZpZ2F0ZXVyIHF1aSBlc3QgdW5lIHNpbXBsZSBpbnRlcmZhY2UgZ3JhcGhpcXVlIHBvdXIgaW50ZXJhZ2lyIGF2ZWMgY2Ugc2VydmV1ciBsb2NhbCwgbWFpcyAqKmxlcyBkb25uw6llcyBuZSBzb250IHBhcyBzdXIgbGUgIm51YWdlIioqLg0KDQotIFRyYXZhaWwgbG9jYWwgZG9uYyBwYXMgZCdlbnZpcm9ubmVtZW50IGNvbGxhYm9yYXRpZi4gDQoNCi0gTGVzIGZpY2hpZXJzIHByb2dyYW1tZXMgc2UgdHJvdXZlcm9udCBkYW5zIGxlIGRvc3NpZXIgZCdpbnN0YWxsYXRpb24gZXQgbGVzIGZpY2hpZXJzIGRlIHByb2pldHMgZGFucyBsZSAqd29ya3NwYWNlIGRpcmVjdG9yeSouDQoNCi0gT3BlblJlZmluZSBuZSBtb2RpZmllIHBhcyBsZSBmaWNoaWVyIG9yaWdpbmFsLCBpbCB0cmF2YWlsbGUgw6AgcGFydGlyIGQndW5lICoqY29waWUgZW4gbcOpbW9pcmUgc3RvY2vDqWUgZW4gYXJjaGl2ZXMqKiBkYW5zIGxlIHLDqXBlcnRvaXJlIGRlIHRyYXZhaWwuDQoNCi0gTGUgcHJvamV0IGVzdCBlbnJlZ2lzdHLDqSBlbiBmb3JtYXQgT3BlblJlZmluZSBhdXRvbWF0aXF1ZW1lbnQgZGFucyBsZSBkb3NzaWVyIGRlIHRyYXZhaWwgY2hhcXVlIDUgbWludXRlcyAoW3BldXQgw6p0cmUgbW9kaWZpw6ldKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvcnVubmluZyNqdm0tcHJlZmVyZW5jZXMpKS4NCg0KLSBMZSBmaWNoaWVyIGRlIGRvbm7DqWVzIHVuZSBmb2lzIG5ldHRvecOpIHBvdXJyYSDDqnRyZSBleHBvcnTDqSBlbiBkaWZmw6lyZW50cyBmb3JtYXRzIGV0IGwnaGlzdG9yaXF1ZS9zeW50YXhlIHBvdXJyYSDDqnRyZSBleHRyYWl0IGVuIGZvcm1hdCBKU09OIGV0IGVucmVnaXN0csOpIGRhbnMgdW4gZmljaGllciAudHh0Lg0KDQotIFBvdXIgZmVybWVyIGxhIHNlc3Npb24gZGUgdHJhdmFpbCBjb3JyZWN0ZW1lbnQsIGZhaXJlIGBDdHJsICsgY2AgZGFucyBmZW7DqnRyZSBkZSBjb21tYW5kZSAocGV1dCDDqnRyZSBuw6ljZXNzYWlyZSBkZSBsZSBmYWlyZSBwbHVzIGQndW5lIGZvaXMpID0gZW5yZWdpc3RyZSBsZSBwcm9qZXQgZXQgZmVybWUgbGUgc2VydmV1ci4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJub3RlIj4NCioqw4Agbm90ZXIqKiAgDQotIFBlcm1ldCBkZSB0cmF2YWlsbGVyIHN1ciBkZSBncm9zIGZpY2hpZXJzIG1haXMgbGEgdGFpbGxlIHBvc3NpYmxlIGVzdCB0b3V0IGRlIG3Dqm1lIGxpbWl0w6llLCBsYSBwZXJmb3JtYW5jZSBwZXV0IGRldmVuaXIgcHJvYmzDqW1hdGlxdWUgw6AgcGx1c2lldXJzIGNlbnRhaW5lcyBkZSBtaWxsaWVycyBkZSBsaWduZXMgKHRvdXQgZMOpcGVuZGFudCBkdSBub21icmUgZGUgY29sb25uZXMpIGRvbmMgcGFzIHZyYWltZW50IGTDqXZlbG9wcMOpIHBvdXIgZmFpcmUgZHUgYmlnIGRhdGEuDQotIFRyYXZhaWxsZSBhdmVjIDFHbyBkZSBtw6ltb2lyZSBwYXIgZMOpZmF1dC4gw4AgcGx1cyBkZSAxMDAgMDAwIGxpZ25lcywgaWwgcGV1dCDDqnRyZSBwcsOpZsOpcmFibGUgZCdbYXVnbWVudGVyIGxhIG3DqW1vaXJlXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2luc3RhbGxpbmcjaW5jcmVhc2luZy1tZW1vcnktYWxsb2NhdGlvbikgZGUgdHJhdmFpbDogIA0KICAtIE91dnJpciBsZSBmaWNoaWVyIHJlZmluZS5pbmkgZGFucyBub3RlcGFkIGV0IG1vZGlmaWVyIGxhIGxpZ25lIFJFRklORV9NRU1PUlkgPSBwYXJhbWV0cmUuICANCiAgLSBQYXIgbGEgc3VpdGUgbGFuY2VyIE9SIGF2ZWMgbGUgZmljaGllciAqcmVmaW5lLmJhdCogZXQgbm9uICpvcGVucmVmaW5lLmV4ZSAqLiAgIA0KDQo8L2Rpdj4NCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAzLjIuIMOJY3JhbiBkJ2FjY3VlaWwNCg0KLSDDgCBwYXJ0aXIgZHUgbWVudSBkZSBnYXVjaGUgaWwgZXN0IHBvc3NpYmxlIGRlIGBDcsOpZXIgdW4gcHJvamV0YCwgYE91dnJpciB1biBwcm9qZXRgIChoaXN0b3JpcXVlIGRlcyBwcm9qZXRzIGVucmVnaXN0csOpcykgb3UgYEltcG9ydGVyIHVuIHByb2pldCBgIChhcmNoaXZlcyAuemlwIHNlIHRyb3V2YW50IGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsKS4gICANCg0KLSBQb3VyIGNoYW5nZXIgbGEgbGFuZ3VlIGRlIGwnaW50ZXJmYWNlIGF1IGZyYW7Dp2FpcywgY2xpcXVlciBzdXIgbCdvbmdsZXQgYExhbmd1ZWAgZGFucyBsZSBtZW51IGRlIGdhdWNoZS4gIA0KDQotIExlIGZpY2hpZXIgcGV1dCDDqnRyZSBjcsOpw6kgw6AgcGFydGlyIGRlIGRpZmbDqXJlbnRlcyBzb3VyY2VzOiBgQ2V0IG9yZGluYXRldXJgIChwb3N0ZSBsb2NhbCksIGBBZHJlc3NlcyB3ZWIgKFVSTHMpYCwgYFByZXNzZS1wYXBpZXJgIChjb3Bpw6ktY29sbMOpKSwgYEdvb2dsZSBkYXRhYCAoR29vZ2xlIHNoZWV0cykuLi4pIGV0IGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMgKC5jc3YsIC50eHQsIC54bWwsIC54bHMsIC5KU09OLCAuemlwIGV0IG5vbiB0YXIuLi4gKGNlcnRhaW5lcyBleHRlbnNpb25zIHBlcm1ldHRlbnQgbCd1c2FnZSBkJ2F1dHJlcyBmb3JtYXRzIGNvbW1lIHJkZikuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMS5qcGcpICANCg0KPC9jZW50ZXI+ICANCg0KLSBEZXV4IGZpY2hpZXJzIG91IHBsdXMgcGV1dmVudCDDqnRyZSBpbXBvcnTDqXMgZW4gbcOqbWUgdGVtcHMuIExlcyBsaWduZXMgc2Vyb250IGltcG9ydMOpZXMgdW5lIMOgIGxhIHN1aXRlIGRlIGwnYXV0cmUgc2Vsb24gbCdvcmRyZSBkJ2ltcG9ydGF0aW9uICh1bmUgY29sb25uZSBwZXJtZXR0YW50IGQnaWRlbnRpZmllciBsZSBmaWNoaWVyIHNvdXJjZSBzZXJhIGNyw6nDqWUgYXV0b21hdGlxdWVtZW50KS4gDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIyAzLjMuIEhpc3RvcmlxdWUgZGVzIHByb2pldHMNCg0KLSBMJ29uZ2xldCBgT3V2cmlyIHVuIHByb2pldGAgcGVybWV0Og0KICAtIEQnYWNjw6lkZXIgZXQgZCdvdXZyaXIgdG91cyBsZXMgcHJvamV0cyBlbnJlZ2lzdHLDqXMgbG9jYWxlbWVudC4NCiAgLSBEJ8OpZGl0ZXIgc2VzIG3DqXRhZG9ubsOpZXMuDQogIC0gRCdhY2PDqWRlciBhdSBkb3NzaWVyIGRlIHRyYXZhaWwgKGTDqWZpbmkgcGFyIGTDqWZhdXQpIG/DuSBPcGVuUmVmaW5lIHN0b2NrZSBsZXMgYXJjaGl2ZXMgZGVzIHByb2pldHMgZW5yZWdpc3Ryw6lzIHBhciBsZSBiaWFpcyBkdSBsaWVuIGBQYXJjb3VyaXIgbGUgZG9zc2llciBkZSBsJ2VzcGFjZSBkZSB0cmF2YWlsYC4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMy5qcGcpDQoNCjwvY2VudGVyPiAgDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPg0KDQojIDQuIENyw6llciB1biBwcm9qZXQNCg0KLSBQb3VyIG91dnJpciB1biBmaWNoaWVyIMOgIHBhcnRpciBkZSBzb24gcG9zdGUsIGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCAtID4gYENldCBvcmRpbmF0ZXVyYCAtID4gYHPDqWxlY3Rpb25uZXIgZmljaGllcnNgIHN1ciBzb24gIHBvc3RlIC0+IGBTdWl2YW50YC4gIA0KDQotIFVuZSBmZW7DqnRyZSBzJ291dnJlIGVuc3VpdGUgcG91ciBwZXJtZXR0cmUgZGUgcHLDqS12aXN1YWxpc2VyIHNvbiBqZXUgZGUgZG9ubsOpZXMgZXQgZGUgbW9kaWZpZXIsIHNpIG7DqWNlc3NhaXJlLCBsZXMgb3B0aW9ucyBkJ2ltcG9ydGF0aW9uIGVuIGZvbmN0aW9uIGRlcyBjYXJhY3TDqXJpc3RpcXVlcyBkdSBmaWNoaWVyIGRlIGRvbm7DqWVzOiBtb2RpZmljYXRpb24gZHUgZm9ybWF0IGRlIGZpY2hpZXIgcydpbCBuJ2EgcGFzIMOpdMOpIGlkZW50aWZpw6kgY29ycmVjdGVtZW50ICg1KSwgbCdlbmNvZGFnZSBkZXMgY2FyYWN0w6hyZXMgW1VURi04XSAoNiksIGxlIHRyYWl0ZW1lbnQgZGVzIGVudMOqdGVzIGV0IHByZW1pw6hyZXMgbGlnbmVzICg5KS4uLg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMi5qcGcpICANCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIENyw6llciB1biBub3V2ZWF1IHByb2pldCBlbiBpbXBvcnRhbnQgbGUgZmljaGllciBgSW5jaWRlbnRzIG3DqXRyby5jc3ZgIGRpc3BvbmlibGUgc3VyIGxlIHNpdGUgW0Rvbm7DqWVzIG91dmVydGVzIE1vbnRyw6lhbF0oaHR0cHM6Ly9kb25uZWVzLm1vbnRyZWFsLmNhL3NvY2lldGUtZGUtdHJhbnNwb3J0LWRlLW1vbnRyZWFsL2luY2lkZW50cy1kdS1yZXNlYXUtZHUtbWV0cm8pICh2b2lyIGF1c3NpIGxlIHNpdGUgZGUgbGEgU1RNIFtJbmRpY2F0ZXVycyBkZSBwZXJmb3JtYW5jZSByZWxpw6lzIGF1IHNlcnZpY2UgbcOpdHJvXShodHRwOi8vd3d3LnN0bS5pbmZvL2ZyL2EtcHJvcG9zL2luZm9ybWF0aW9ucy1lbnRyZXByaXNlLWV0LWZpbmFuY2llcmVzL2V4cGVyaWVuY2UtY2xpZW50L2luZGljYXRldXJzLWRlLXBlcmZvcm1hbmNlLXJlbGllcykpDQoNCi0gRXhwbG9yZXIgbGVzIG9wdGlvbnMgZCdpbXBvcnRhdGlvbiAtPiBQb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1eCBvcHRpb25zOiBgU3VwcHJpbWVyIGxlcyBlc3BhY2VzYCAoOCAtPiBjb2NoZXIpLCAJYFV0aWxpc2VyIGxlIGNhcmFjdMOocmUJIiBwb3VyIGZlcm1lciBsZXMgY2VsbHVsZXMgY29udGVuYW50IGxlcyBzw6lwYXJhdGV1cnMgZGUgY29sb25uZXNgICgxMCAtPiBjb2NoZXIgb3Ugbm9uKSwgYEFuYWx5c2VyIGxlIHRleHRlIGRlcyBjZWxsdWxlcyBjb21tZSBub21icmVzICwgZGF0ZXPigKZgICgxMSAtPiBkw6ljb2NoZXIpDQoNCi0gQ2hhbmdlciBsZSBgTm9tIGR1IHByb2pldGAgWzJdIGV0IGNsaXF1ZXIgc3VyIGBDcsOpZXIgdW4gcHJvamV0YCBbNF0gLSBFbiBjYXMgZGUgcHJvYmzDqG1lLCBpbCBlc3QgcG9zc2libGUgZGUgcmVjb21tZW5jZXIgbGUgcHJvY2Vzc3VzIFsxXS4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyA1LiBFeHBsb3JlciBsJ2ludGVyZmFjZQ0KDQotIEwnaW50ZXJmYWNlIGVzdCBzaW1pbGFpcmUgw6AgRXhjZWwgbWFpcyBvbiBuZSBwZXV0IHZvaXIgbCdlbnNlbWJsZSBkZXMgbGlnbmVzLCBsYSAibG9naXF1ZSIgZCdPcGVuUmVmaW5lIHJlcG9zZSBzdXIgbGUgdHJhdmFpbCBlbiAqKmNvbG9ubmVzKiouDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRldXggdnVlcyBkZXMgZG9ubsOpZXM6IGBsaWduZXNgIGV0IGBlbnRyw6llcy5gIExlcyBkb25uw6llcyBzb250IGfDqW7DqXJhbGVtZW50IHByw6lzZW50w6llcyBlbiBtb2RlIGBsaWduZXNgLCBjJ2VzdC3DoC1kaXJlIGNoYXF1ZSBsaWduZSByZXByw6lzZW50ZSB1bmUgb2JzZXJ2YXRpb24uIExlIG1vZGUgYGVudHLDqWVzYCBwZXJtZXQgZCdhc3NvY2llciBwbHVzaWV1cnMgbGlnbmVzIMOgIHVuZSBvYnNlcnZhdGlvbi4NCg0KLSBJbCBlc3QgZG9uYyBwb3NzaWJsZSBkZSBtb2RpZmllciBsYSBzdHJ1Y3R1cmUgZHUgZmljaGllciBwb3VyIHF1ZSBwbHVzaWV1cnMgbGlnbmVzIHNvaWVudCBhc3NvY2nDqWVzIMOgIHVuIHNldWwgY2FzIGVuIHNlIGJhc2FudCBzdXIgbGEgY29sb25uZSBjbMOpICgqKnNldWxlIGxhIGxpZ25lIG9yaWdpbmFsZSBzZXJhIG51bcOpcm90w6llKiopLCBtYWlzIGRvaXQgc2UgZmFpcmUgYXZlYyBwcsOpY2F1dGlvbnMuIFBvdXIgbGVzIGxvZ2ljaWVscyBkJ2FuYWx5c2UsIGxlIGZvcm1hdCAqdGlkeSogKGBsaWduZXNgKSBlc3Qgw6AgcHJpdmlsw6lnaWVyLg0KDQo8Y2VudGVyPiAgDQoNCiFbXShpbWFnZXMvT1I0LmpwZykgDQoNCjwvY2VudGVyPiAgDQoNCjEuIExpZW4gc291cyBsJ2ljw7RuZSByZW52b2kgdmVycyBsYSBwYWdlIGQnYWNjdWVpbC9pbXBvcnRhdGlvbi4NCjIuIFJlbm9tbWVyIGxlIG5vbSBkZSBzb24gcHJvamV0IGVuIHRvdXQgdGVtcHMuDQozLiBQZXJtYWxpZW4gcXVpIHBlcm1ldCBkZSByZXZlbmlyIMOgIHVuZSB2dWUgcHLDqWNpc2UgKGFmZmljaGFnZSwgdHJpLCBmYWNldHRlcy4uLikgZHUgcHJvamV0Lg0KNC4gTm9tYnJlIGRlIGxpZ25lcy9vYnNlcnZhdGlvbnMgZHUgZmljaGllci4NCjUuIENoYW5nZW1lbnQgZHUgbW9kZSBsaWduZXMgb3Ugb2JzZXJ2YXRpb25zLg0KNi4gTW9kaWZpZXIgbGUgbm9tYnJlIGRlIGxpZ25lcyBhZmZpY2jDqWVzLg0KNy4gUGFzc2VyIGQndW5lIHBhZ2Ugw6AgbCdhdXRyZS4NCjguIE91dnJpciB1biBub3V2ZWwgb25nbGV0IE9wZW5SZWZpbmUuDQo5LiBFeHBvcnRlciBsZSBmaWNoaWVyIGVuIGRpZmbDqXJlbnRzIGZvcm1hdHMuDQoNCjwvYnI+DQoNCioqKg0KDQo8L2JyPiANCg0KIyMgNS4xLiBMJ8OpZGl0aW9uIGRlIGNlbGx1bGVzDQoNCi0gSWwgZXN0IHBvc3NpYmxlIGQnw6lkaXRlciBtYW51ZWxsZW1lbnQgbGUgY29udGVudSBkZSBjZWxsdWxlcyBpbmRpdmlkdWVsbGVzIGVuIHNlIHBsYcOnYW50IHN1ciBjaGFjdW5lIGV0IGVuIGNsaXF1YW50IGBlZGl0YCwgbWFpcyBPcGVuUmVmaW5lIHByaXZpbMOpZ2llIGxlICoqdHJhdmFpbCBlbiBsb3QgcGFyIGNvbG9ubmVzKiogcG91ciBmaWx0cmVyLCB0cmllciwgdHJhbnNmb3JtZXIuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIHBldXQgcydhcHBsaXF1ZXIgaW5kaXZpZHVlbGxlbWVudCBvdSBzdXIgdG91dGVzIGxlcyBjZWxsdWxlcyBhdmVjIGxhIG3Dqm1lIHZhbGV1ciBkYW5zIGNldHRlIGNvbG9ubmUuDQoNCi0gUGVybWV0IMOpZ2FsZW1lbnQgZGUgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIGxhIGNlbGx1bGUuDQoNCjxjZW50ZXI+ICANCg0KIVtdKGltYWdlcy9PUjIyLmpwZyl7d2lkdGg9ODAlfQ0KDQo8L2NlbnRlcj4gIA0KDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIERhbnMgbGEgY29sb25uZSAqQ2F1c2UgcHJpbWFpcmUqIGNsaXF1ZXIgZGFucyB1bmUgY2VsbHVsZSAqQXV0cmVzKiwgw6lkaXRlciBzb24gY29udGVudSBwb3VyICphdXRyZSogZXQgYXBwbGlxdWVyIMOgIGxhIGNlbGx1bGUuIA0KLSBEYW5zIGxhIGNvbG9ubmUgKlBvcnRlKiwgbW9kaWZpZXIgbGUgZm9ybWF0IGRlIG4naW1wb3J0ZSBxdWVsbGUgY2VsbHVsZSDDoCAqTm9tYnJlKiBldCBhcHBsaXF1ZXIgw6AgdG91dGVzIGxlcyBjZWxsdWxlcyBpZGVudGlxdWVzLg0KLSBEYW5zIGxhIGNvbG9ubmUgKsOJdmFjdWF0aW9uKiwgbW9kaWZpZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlICIjIiBwYXIgKk5vbiogZXQgYXBwbGlxdWVyIMOgIHRvdXRlcyBsZXMgY2VsbHVsZXMgaWRlbnRpcXVlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNS4yLiBGb3JtYXQgZGVzIGRvbm7DqWVzDQoNCiMjIyMgVHJvaXMgZm9ybWF0cyBkZSBiYXNlOiANCiAgMS4gQ2hhw65uZSBkZSBjYXJhY3TDqHJlcw0KICAyLiBOb21icmUNCiAgMy4gRGF0ZSAobm9ybWUgSVNPLTg2MDEgWVlZWS1NTS1ERFRISDpNTTpTU1opKg0KICANCiAgPC9icj4NCiAgDQojIyMjIERldXggZm9ybWF0cyBkw6ljb3VsYW50IGQnYWN0aW9uczogDQogIC0gRXJyZXVyIChmb3JtYXQgYXR0cmlidcOpIHN1aXRlIMOgIHVuZSBlcnJldXIgZGUgdHJhbnNmb3JtYXRpb24pICANCiAgLSBOdWxsKioNCg0KPC9icj4NCg0KIyMjIyBEZXV4IGF1dHJlcyB0eXBlcyBwYXJ0aWN1bGllcnMgZMOpY291bGFudCBkZSBtYW5pcHVsYXRpb25zDQogIC0gQm9vbMOpZW4gKHZhbGV1ciBiaW5haXJlIFQgb3UgRikNCiAgLSAqQXJyYXkqIChsaXN0ZSBkZSB2YWxldXJzIHPDqXBhcsOpZXMgcGFyIHVuZSB2aXJndWxlIGVudHJlIGNyb2NoZXRzIHBvdXZhbnQgw6p0cmUgdHJhbnNmb3Jtw6llcykNCg0KPC9icj4NCg0KIyMjIyMgKiBGb3JtYXQgZGF0ZQ0KDQotIFNlbG9uIGxlcyBiZXNvaW5zLCBsZXMgZGF0ZXMgcGV1dmVudCDDqnRyZSB0cmFpdMOpZXMgc291cyBmb3JtZSBkZSBgdGV4dGVgLCBkZSBgbm9tYnJlYCBvdSBgZGF0ZWAgKGxlIGZvcm1hdCBkYXRlIGVzdCBzdXJ0b3V0IG7DqWNlc3NhaXJlIHBvdXIgbGVzIGNhbGN1bHMgZGUgZGF0ZXMpLg0KLSBMZSBmb3JtYXQgZGF0ZSByZXBvc2Ugc3VyIHVuZSBzw6lyaWUgZCdvdXRpbHMgZXQgZGUgIHN0YW5kYXJkcyBwb3VyIHJlY29ubmFpdHJlIGV0IGNvbnZlcnRpciBsZXMgdmFsZXVycyBvcmlnaW5hbGVzIGVuIGRhdGUuIA0KLSBQb3VyIHF1J3VuZSBjZWxsdWxlIHNvaXQgcmVjb25udWUgY29tbWUgZGF0ZSwgZWxsZSBzZXJhIHRyYW5zZm9ybcOpZSBhdSBmb3JtYXQgKklTTy04NjAxLWNvbXBsaWFudCouDQotIFBvc3NpYmxlIGRlIG1vZGlmaWVyIGNlIGZvcm1hdCBwb3VyIHF1J2lsIHNvaXQgcGx1cyBmYWNpbGVtZW50IGxpc2libGUgw6AgbCdleHBvcnRhdGlvbi4NCg0KPC9icj4NCg0KIyMjIyMgKiogRm9ybWF0ICJtYW5xdWFudCINCg0KLSBPcGVuUmVmaW5lIGZhaXQgdW5lIGRpc3RpbmN0aW9uIGVudHJlIGxlcyAqKmNlbGx1bGVzIHZpZGVzIGF2ZWMgZXNwYWNlcyBibGFuY3MqKiAocXVpIG5lIHNvbnQgcGFzIHZpZGVzISksIGxlcyAqKnZhbGV1cnMgdmlkZXMqKiAoY2hhaW5lIGRlIGxvbmd1ZXVyIDApLCBldCBsZXMgKip2YWxldXJzICJudWxsIioqICh0eXBlIHNww6ljaWFsIHF1aSBuJ2VzdCBwYXMgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcykuIExlcyAqdmlkZXMqIGV0IGxlcyAqbnVsbCogc29udCBhdXNzaSBjb25zaWTDqXLDqXMgY29tbWUgKkJsYW5rKi4NCi0gUGx1c2lldXJzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIHNvdXMgYEZhY2V0dGVzYCBldCBgw4lkaXRlciBsZXMgY2VsbHVsZXNgIHBlcm1ldHRlbnQgZGUgZ8OpcmVyIGNlcyB0eXBlcyBkZSB2YWxldXJzLg0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipUcmFuc2Zvcm1lciB1bmUgY29sb25uZSBkYXRlIGRlIGZvcm1hdCBjYXJhY3TDqHJlIGVuIGZvcm1hdCBkYXRlKio6ICANCi0gRGFucyBsYSBjb2xvbm5lICpKb3VyIGNhbGVuZGFpcmUqOiBgTWVudSAtPiDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgICAgIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAibm90ZSI+DQotIMOAIGwnaW1wb3J0YXRpb24gZCd1biBmaWNoaWVyLCBjaGFxdWUgY2VsbHVsZSBzZSB2ZXJyYSBhdHRyaWJ1ZXIgdW4gZm9ybWF0LiANCi0gUGFyIGTDqWZhdXQsIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVzdCBkZSBmb3JtYXQgY2hhw65uZXMuICANCi0gTGUgY29udGVudSBkZXMgY2VsbHVsZXMgcmVjb25udSBjb21tZSBudW3DqXJpcXVlIGV0IGRhdGUgc2VyYSBkZSBjb3VsZXVyIHZlcnRlLiAgDQotIExlIGZvcm1hdCBwZXV0IMOqdHJlIG1vZGlmacOpIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiBCb3V0b24gYGVkaXRgLCBgVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlc2AsIEZlbsOqdHJlIEdSRUwuICANCi0gQ2UgZm9ybWF0IGF1cmEgdW4gaW1wYWN0IHN1ciBsZXMgYWN0aW9ucyBwb3NzaWJsZXMuICANCi0gTGUgY2hhbmdlbWVudCBkZSBmb3JtYXQgcGFyIMOpZGl0aW9uIGRpcmVjdGUgZCd1bmUgY2VsbHVsZSBlc3QgdW5lIG9ww6lyYXRpb24gZGlzdGluY3RlIGRlIGxhIHRyYW5zZm9ybWF0aW9uIGR1IGNvbnRlbnUuIExhIHByZW1pw6hyZSBvcMOpcmF0aW9uIGFycml2ZSBwYXJmb2lzIMOgIGNoYW5nZXIgZGVzIGZvcm1hdHMgcXVlIGxhIHRyYW5zZm9ybWF0aW9uIG5lIHBldXQgZmFpcmUuDQotIFBvdXIgcGx1cyBkJ2luZm9ybWF0aW9uIHN1ciBsZXMgZm9ybWF0cywgdm9pciBsYSBbZG9jdW1lbnRhdGlvbiBvZmZpY2llbGxlXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cGxvcmluZykuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KIyMgNS4zLiBMYSBnZXN0aW9uIGRlcyBsaWduZXMgZXQgY29sb25uZXMNCg0KKipMYSBnZXN0aW9uIGRlcyBjb2xvbm5lcyBwZXV0IHNlIGZhaXJlOioqDQoNCi0gU3VyIGNoYXF1ZSBjb2xvbm5lOiANCiAgLSBGb25jdGlvbnMgc291cyBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IETDqXBsYWNlciAuLi4gLyBSZW5vbW1lciAvIFN1cHByaW1lcmAgICANCiAgLSBGb25jdGlvbnMgc291cyBgQXBlcsOndSAtPiBNYXNxdWVyLi4uIGAgICANCg0KPC9icj4NCg0KLSBTdXIgbGEgY29sb25uZSBgVG91dGVzYDogICAgIA0KICAtIGDDiWRpdGVyIGxlcyBjb2xvbm5lcyAtPiBSZXRyaWVyLXN1cHByaW1lciwgZ2VzdGlvbiBkZXMgdmFsZXVycyBjb25zw6ljdXRpdmVzYCAgICANCiAgLSBgQXBlcsOndSAtPiBBZmZpY2hlci1tYXNxdWVyYC4uLiAgDQoNCjwvYnI+DQoNCioqTGEgZ2VzdGlvbiBkZXMgbGlnbmVzOioqDQoNCi0gTGEgc8OpbGVjdGlvbiBkZSBsaWduZXMgcGV1dCBzZSBmYWlyZSBwYXIgbGUgYmlhaXMgZGUgZmlsdHJlcywgZmFjZXR0ZXMgZXQgYXV0cmVzIG1hbmlwdWxhdGlvbnMgcGVyc29ubmFsaXPDqWVzLiAgDQotIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBtYXJxdWVyL8OpdG9pbGVyIGRlcyBsaWduZXMgZW4gbG90IG91IGluZGl2aWR1ZWxsZW1lbnQgcHVpcyBkZSBjcsOpZXIgdW5lIGZhY2V0dGUgc3VyIGxhIGNvbG9ubmUgYFRvdXRlc2AuICANCi0gT24gcGV1dCBlbnN1aXRlIHN1cHByaW1lciBsZXMgbGlnbmVzIGZpbHRyw6llczogYFRvdXRlcyAtPiDDiWRpdGVyIGxlcyBsaWduZXMgLT4gU3VwcHJpbWVyIGxlcyBsaWduZXMgY29ycmVzcG9uZGFudGVzYC4gIA0KDQo8L2JyPg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipTdXBwcmltZXIgdW5lIGNvbG9ubmU6ICoqICANCi0gU3VyIGxhIGNvbG9ubmUgKlR5cGUgZCdpbmNpZGVudCogLT4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBTdXBwcmltZXIgY2V0dGUgY29sb25uZWAuICANCg0KKipTdXBwcmltZXIgcGx1c2lldXJzIGNvbG9ubmVzOiAqKiAgDQotIFN1ciBsYSBjb2xvbm5lICpUb3V0ZXMqIC0+IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gw4lkaXRlci9TdXBwcmltZXIgbGVzIGNvbG9ubmVzYCAtPiAqS0ZTKiBldCAqQ0FUKi4gIA0KDQo8L2Rpdj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDUuNC4gSGlzdG9yaXF1ZSAoVW5kby9SZWRvKQ0KDQotIFRvdXRlcyBsZXMgYWN0aW9ucyBzb250IGVucmVnaXN0csOpZXMgKGxvZyBkZSBzZXMgbWFuaXB1bGF0aW9ucykgZXQgcGV1dmVudCDDqnRyZSBhbm51bMOpZXMgZW4gcmVjdWxhbnQgw6l0YXBlIHBhciDDqXRhcGUgZGFucyBsJ2hpc3RvcmlxdWUuICANCi0gTGEgcHJlbWnDqHJlIGFjdGlvbiBkJ3VuIGhpc3RvcmlxdWUgZXN0IGxhIGNyw6lhdGlvbiBkdSBwcm9qZXQuICANCi0gUHVpc3F1ZSBsJ2hpc3RvcmlxdWUgZmFpdCBwYXJ0aWUgZHUgcHJvamV0IGVucmVnaXN0csOpIGRhbnMgbGUgZG9zc2llciBkZSB0cmF2YWlsLCBpbCBuZSBkaXNwYXJhaXQgcGFzIMOgIGxhIGZlcm1ldHVyZSBkZSBsYSBzZXNzaW9uLiANCi0gTCdoaXN0b3JpcXVlIHBldXQgw6p0cmUgZXh0cmFpdCBlbiBmb3JtYXQgSlNPTiwgY29waWVyL2NvbGxlciBkYW5zIG5vdGVwYWQgZXQgYXBwbGlxdWVyIGRlIG5vdXZlYXUuICANCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMTkuanBnKXt3aWR0aD02MCV9DQoNCjwvY2VudGVyPiAgDQoNCioqQXR0ZW50aW9uISoqDQoNCi0gU2kgb24gcmVjdWxlIGRhbnMgbGUgdGVtcHMgZXQgcXUnb24gZmFpdCB1bmUgbW9kaWZpY2F0aW9uLCBsZXMgw6l0YXBlcyBxdWkgc3VpdmVudCBkYW5zIGwnaGlzdG9yaXF1ZSBkaXNwYXJhaXNzZW50IHBvdXIgZGUgYm9uLiAgDQoNCi0gTGVzIG1hbmlwdWxhdGlvbnMgcmVsYXRpdmVzIMOgIGwnYWZmaWNoYWdlIG5lIHNvbnQgcGFzIGVucmVnaXN0csOpZXMgZGFucyBsJ2hpc3RvcmlxdWUsIHNldWxlbWVudCBsZXMgdHJhbnNmb3JtYXRpb25zLiBMJ2VucmVnaXN0cmVtZW50IGF1dG9tYXRpcXVlIG5lIGNvbXByZW5kIGRvbmMgcGFzIGxlcyBmYWNldHRlcyBldCBmaWx0cmVzICh2dWUgZGUgbCdpbnRlcmZhY2UpIC0gcGVyZCBjZSBxdWkgbidhcHBhcmFpdCBwYXMgZGFucyBsZSBgRMOpZmFpcmUvUmVmYWlyZWAuDQoNCi0gTCfDqWRpdGlvbiBkaXJlY3RlIGRhbnMgbGVzIGNlbGx1bGVzIGFwcGFyYWl0IGRhbnMgbCdoaXN0b3JpcXVlIG1haXMgbmUgcGV1dCDDqnRyZSBleHBvcnTDqWUuICANCg0KLSBGYWNldHRlcyBldCBmaWx0cmVzIHMnZW5yZWdpc3RyZW50IGdyw6JjZSBhdSBgcGVybWFsaWVuYC4gIA0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyA2LiBNZW51IGV0IGZvbmN0aW9ucyBkZSBiYXNlDQoNCk9wZW4gUmVmaW5lIHBlcm1ldCBkZSB0cmF2YWlsbGVyIGRlICoqZGV1eCBmYcOnb25zKio6ICANCg0KDQoxLiBBdmVjIGwnZW5zZW1ibGUgZGVzICoqZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMqKiBxdWUgbCdvbiByZXRyb3V2ZSBkYW5zIGxlcyBtZW51cy4NCg0KDQoyLiBBdmVjIGxlICoqbGFuZ2FnZSBHUkVMKiogcGVybWV0dGFudCBkZSByw6lkaWdlciBzZXMgcHJvcHJlcyBbZXhwcmVzc2lvbnMuXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2V4cHJlc3Npb25zKS4gIA0KDQotIE3Dqm1lIGxvcnNxdWUgbCdvbiB1dGlsaXNlIGxlcyBmb25jdGlvbnMgYXV0b21hdGlzw6llcywgaWwgZXN0IHBvc3NpYmxlIGQnZW4gbW9kaWZpZXIgbGUgZm9uY3Rpb25uZW1lbnQgZW4gw6lkaXRhbnQgZGlyZWN0ZW1lbnQgbGEgc3ludGF4ZSBHUkVMIGNvcnJlc3BvbmRhbnRlLiANCg0KPC9icj4NCg0KIyMgNi4xLiBGb25jdGlvbnMgYXV0b21hdGlzw6llczoNCg0KLSBMZSBtZW51IGV0IGwnZW5zZW1ibGUgZGUgc2VzIGZvbmN0aW9ucyBhdXRvbWF0aXPDqWVzIGFwcGFyYWlzc2VudCBlbiBjbGlxdWFudCBzdXIgbGEgZmzDqGNoZSBkZSBsJ2ludGl0dWzDqSBkZSBjaGFxdWUgY29sb25uZS4NCg0KLSBMZXMgZm9uY3Rpb25zIGRpc3BvbmlibGVzIHNvdXMgbGUgbWVudSBkZSBsYSBwcmVtacOocmUgY29sb25uZSBgVG91dGVzYCBzZSBkaXN0aW5ndWVudCBkZXMgYXV0cmVzIHB1aXNxdSdlbGxlcyBwZXJtZXR0ZW50IGQnYXBwbGlxdWVyIGRlcyBmb25jdGlvbnMgw6AgbCdlbnNlbWJsZSBkZXMgY29sb25uZXMgZHUgZmljaGllcjogTWFycXVlciwgw6l0b2lsZXIsIHN1cHByaW1lciwgbWFzcXVlci4uLg0KDQo8L2JyPg0KDQojIyMjIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGxhIGNvbG9ubmUgYFRvdXRlc2ANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjIxLmpwZyl7d2lkdGg9OTAlfQ0KDQo8L2JyPg0KDQojIyMjIE1lbnUgZXQgZm9uY3Rpb25zIGRlIGNoYXF1ZSBjb2xvbm5lLXZhcmlhYmxlDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxMi5qcGcpe3dpZHRoPTkwJX0NCg0KPC9icj4NCg0KKioqDQoNCiMjIDYuMi4gTGUgbGFuZ2FnZSBHUkVMDQoNCjwvYnI+DQoNCiFbXShpbWFnZXMvT1IxNC5qcGcpDQoNCjwvYnI+DQoNCkdSRUwgLSBFeHByZXNzaW9ucyBzaW1pbGFpcmVzIGF1eCBmb3JtdWxlcyBleGNlbCBtYWlzIHF1aSBzJ2FwcGxpcXVlbnQgYXV4IGNvbG9ubmVzLCBub24gYXV4IGNlbGx1bGVzLCBldCBxdWkgbmUgc29udCBwYXMgc3RvY2vDqWVzIMOgIG3Dqm1lIGxlcyBkb25uw6llcyBtYWlzIGRhbnMgdW4gc2NyaXB0LiAgDQoNCjwvYnI+DQoNCiMjIyBMZSBsYW5nYWdlIEdSRUwgcGV1dCBzJ3V0aWxpc2VyIGRlIGRpZmbDqXJlbnRlcyBmYcOnb25zOiAgDQoNCi0gRW4gY3LDqWFudCBkZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIDogYEZhY2V0dGUgLT4gRmFjZXR0ZSB0ZXh0dWVsbGUgcGVyc29ubmFsaXPDqWVgLiAgDQoNCi0gRW4gdHJhbnNmb3JtYW50IHVuZSBjb2xvbm5lOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gdHJhbnNmb3JtZXJgIChhdXNzaSBzb3VzIGBUb3V0ZXMgLT4gVHJhbnNmb3JtZXJgKS4gIA0KDQotIEVuIGNyw6lhbnQgdW5lIG5vdXZlbGxlIGNvbG9ubmU6IGDDiWRpdGVyIGxhIGNvbG9ubmUgLT4gQWpvdXRlciB1bmUgY29sb25uZSBiYXPDqWUgc3VyIGNldHRlIGNvbG9ubmVgLiAgDQoNCjwvYnI+DQoNCioqTGVzIGZpbHRyZXMgZXQgbGVzIHRyYW5zZm9ybWF0aW9ucyBwbHVzIGNvbXBsZXhlcyBwZXV2ZW50IGF1c3NpIG7DqWNlc3NpdGVyIGwndXNhZ2UgZCdbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzIChyZWdleCldKGh0dHBzOi8vcmVnZXgxMDEuY29tLykqKg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNi4zLiBUcmllciB1biBmaWNoaWVyDQoNCi0gTGVzIGRvbm7DqWVzIGFwcGFyYWlzc2VudCBkYW5zIGwnb3JkcmUgZHUgZmljaGllciBvcmlnaW5hbC4NCi0gUG91ciBtb2RpZmllciBsJ29yZHJlIGQnYXBwYXJpdGlvbiBkZXMgb2JzZXJ2YXRpb25zLCBhcHBsaXF1ZXIgdW4gb3UgZGVzIHRyaXMgc3VyIGxlcyBjb2xvbm5lcyBhdmVjIGBUcmllci4uLmANCi0gUG91ciBjb21iaW5lciBwbHVzaWV1cnMgdHJpcyBzdXIgZGlmZsOpcmVudGVzIGNvbG9ubmVzOiBGYWlyZSB1biB0cmllIHN1ciB1bmUgY29sb25uZSBwdWlzIHN1ciB1bmUgYXV0cmUgZW4gbW9kaWZpYW50IHNpIG7DqWNlc3NhaXJlIGwnb3B0aW9uIGBUcmllciBzZWxvbiBjZXR0ZSBzZXVsZSBjb2xvbm5lYC4NCi0gTGVzIHRyaXMgbmUgc29udCBxdWUgdGVtcG9yYWlyZXMgZXQgbidhZmZlY3RlbnQgZG9uYyBxdWUgbCdhZmZpY2hhZ2UuIFBvdXIgcXUnaWxzIHNvaWVudCBwZXJtYW5lbnRzIChyZW51bcOpcm90YXRpb24gZGVzIGxpZ25lcyk6IGBUcmllciAtPiBSZXRyaWVyIGxlcyBsaWduZXMgZGUgZmHDp29uIHBlcm1hbmVudGVgKi4gIA0KLSBJbCBlc3QgcG9zc2libGUgZGUgc3VwcHJpbWVyIGV0IGQnaW52ZXJzZXIgbGUgdHJpIMOgIHBhcnRpciBkZXMgb3B0aW9ucyBzdXIgY2hhcXVlIGNvbG9ubmUgb3UgZ3LDomNlIMOgIGxhIGZvbmN0aW9uIGBUcmllcmAgZHUgaGF1dC4gIA0KDQogKkxlIHRyaSBwZXJtYW5lbnQgYWZmZWN0ZSB0b3V0IGxlIGZpY2hpZXIsIHBhcyBzZXVsZW1lbnQgbGEgdnVlIGZpbHRyw6llLiAgDQoNCiFbXShpbWFnZXMvT1I2LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIFRyaWVyIGxlcyB2YWxldXJzIGRlIGxhIGNvbG9ubmUgYEpvdXIgY2FsZW5kYWlyZWAgZW4gYGRhdGUgYW50w6ljaHJvbm9sb2dpcXVlYC4gIA0KLSBRdWVsbGUgZXN0IGxhIGRlcm5pw6hyZSBkYXRlIGQnaW5jaWRlbnQgZW5yZWdpc3Ryw6llIGRhbnMgbGUgZmljaGllciA/ICANCi0gU3VwcHJpbWVyIGxlIHRyaS4gIA0KPC9kaXY+DQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBUcmllciBsZXMgdmFsZXVycyBkZSBsYSBjb2xvbm5lIGBNb2lzIENhbGVuZHJpZXJgICANCi0gVHJpZXIgbGVzIHZhbGV1cnMgZGUgbGEgY29sb25uZSBgSm91ciBkdSBtb2lzYCAgDQotIEV4cGxvcmVyIGxlIHLDqXN1bHRhdC4uLiANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMgNi40LiBGaWx0cmVyIGxlIHRleHRlDQoNCi0gTGEgZm9uY3Rpb24gYEZpbHRyZXIgbGUgdGV4dGVgIHBlcm1ldCBkZSBjaGVyY2hlciB1bmUgb3UgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZXMgZGFucyB1bmUgb3UgcGx1c2lldXJzIHZhcmlhYmxlcy4gIA0KLSBQZXJtZXQgZGUgcmVjaGVyY2hlciBkZXMgY2hhaW5lcyBkZSBjYXJhY3TDqHJlcyBkYW5zIHVuZSBjb2xvbm5lIGV0IGRlIGNvbWJpbmVyIGRlcyBmaWx0cmVzIGFwcGxpcXXDqXMgc3VyIHBsdXNpZXVycyBjb2xvbm5lcyBwb3VyIHJhZmZpbmVyIGxhIHJlY2hlcmNoZS4gIA0KLSBGb25jdGlvbiBwbHVzIGV4cMOpZGl0aXZlIHF1ZSBsZXMgZmFjZXR0ZXMgcXVhbmQgb24gbmUgdmV1dCBxdWUgY2hlcmNoZXIgdW5lIGNoYWluZSBkZSBjYXJhY3TDqHJlcy4gIA0KLSBMJ2FmZmljaGFnZSBkZXMgbGlnbmVzIHNlIGxpbWl0ZXJhIGF1IG5vbWJyZSBkZSBjYXMgY29ycmVzcG9uZGFudHMgYXV4IGNyaXTDqHJlcyBkZSByZWNoZXJjaGUgaW5zY3JpdHMgZGFucyBsZXMgYm9pdGVzIGRlIGZpbHRyZXMuICANCi0gKipUYW50IHF1ZSBsZXMgZmlsdHJlcyBzZXJvbnQgYWN0aWZzLCBsZXMgYWN0aW9ucyBzdWJzw6lxdWVudGVzIHNlIGxpbWl0ZXJvbnQgw6AgY2VzIGNhcyBmaWx0csOpcy4qKiAgDQoNCiFbXShpbWFnZXMvT1I3LmpwZykgDQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEZpbHRyZXIgbGUgdGV4dGUgc3VyIGxhIGNvbG9ubmUgKkNvZGUgZGUgbGlldSo6ICJiZXJyaSIgIA0KLSBGaWx0cmVyIGxlIHRleHRlIHN1ciBsYSBjb2xvbm5lICpIZXVyZSBkZSBsJ8OpdsOpbmVtZW50KjogIjEyIiAgDQotIEV4cGxvcmVyIGxlcyByw6lzdWx0YXRzICANCi0gQ29tbWVudCBzJ2Fzc3VyZXIgZCdhdm9pciBzZXVsZW1lbnQgbGVzIGNhcyBzdXJ2ZW51cyBlbnRyZSAxMmggZXQgMTNoPyBDb21iaWVuIGRlIGxpZ25lcyBjb3JyZXNwb25kZW50IMOgIGNlcyBjb25kaXRpb25zPyANCi0gVG91dCBzdXBwcmltZXIgbGVzIGZpbHRyZXMuDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMgNy4gTGVzIGZhY2V0dGVzDQoNCjxkaXYgY2xhc3MgPSAicmlnaHQiPg0KPGltZyBzcmM9ImltYWdlcy9PUjM0LmpwZyIgIHdpZHRoPSI2MCUiIC8+DQo8L2Rpdj4NCg0KLSBMZXMgZmFjZXR0ZXMgY29uc3RpdHVlbnQgbGEgbWFycXVlIGRlIGNvbW1lcmNlIGQnT3BlblJlZmluZSwgZCdvw7kgbGUgbG9nbyEgDQoNCi0gRm9uY3Rpb25uYWxpdMOpIHB1aXNzYW50ZSBxdWkgcGVybWV0IGQnZXhwbG9yZXIgZXQgZGUgZmlsdHJlciBzZXMgZG9ubsOpZXMgZW4gZm9uY3Rpb24gZGUgZGlmZsOpcmVudGVzIGNvbmRpdGlvbnMuICANCg0KLSBOJ2FmZmVjdGVudCBwYXMgZGlyZWN0ZW1lbnQgbGVzIGRvbm7DqWVzLCBzZXVsZW1lbnQgbGEgcHLDqXNlbnRhdGlvbi4gIA0KDQotIMOAIGxhIGJhc2UsIHVuZSBmYWNldHRlIGNvcnJlc3BvbmQgw6AgbGEgbGlzdGUgZGVzIHZhbGV1cnMgcG9zc2libGVzIGQndW5lIHZhcmlhYmxlICAoZXQgZGUgbGV1ciBvY2N1cnJlbmNlKSBwcsOpc2VudMOpZSBzZWxvbiBsZSBmb3JtYXQgKGNoYWluZSwgbnVtw6lyaXF1ZSwgZGF0ZSkuICANCg0KLSBQZXJtZXR0ZW50IHVuZSBleHBsb3JhdGlvbiBldCBtYW5pcHVsYXRpb24gZGVzIHZhbGV1cnMgcG9zc2libGVzIGV0IGRlIGxldXJzIGNhcyBjb3JyZXNwb25kYW50cyBwbHVzIMOpbGFib3LDqWVzIHF1ZSBsZXMgZmlsdHJlcy4gIA0KDQotIE9uIHBldXQgYWluc2kgaWRlbnRpZmllciBsZXMgdGVuZGFuY2VzLCBsZXMgcsOpZ3VsYXJpdMOpcywgbGVzIGVycmV1cnMsIGxlcyDDqWNhcnRzLCBsZXMgcsOpcMOpdGl0aW9ucyBldCAgY2libGVyIGxlcyB2YWxldXJzIGRlIHNvdXMtZ3JvdXBlcyBwcsOpY2lzLiAgDQoNCi0gQ2VzIHNvdXMtZ3JvdXBlcyBwZXV2ZW50IGVuc3VpdGUgw6p0cmUgw6lkaXTDqXMgZXQgZXhwb3J0w6lzIChib3V0b24gYEV4cG9ydGVyYCBlbiBoYXV0IMOgIGRyb2l0ZSkuIA0KDQo8L2JyPg0KDQojIyMgRGV1eCB0eXBlcyBkZSBmYWNldHRlczoNCg0KICAtIFsxXSBMZXMgZmFjZXR0ZXMgYXV0b21hdGlzw6llcy4gDQogIDwvYnI+DQogIC0gWzJdIExlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMuDQogIDwvYnI+DQogIC0gWzNdIElsIGVzdCBhdXNzaSBwb3NzaWJsZSBkZSBjcsOpZXIgc2VzIHByb3ByZXMgZmFjZXR0ZXMgZ3LDomNlIGF1IGxhbmdhZ2UgR1JFTCBwb3VyIGTDqWZpbmlyIGRlcyBjb25kaXRpb25zIGRlIHPDqWxlY3Rpb24vZmlsdHJlIHRyw6hzIHByw6ljaXNlcyAob24gcGFybGUgZW5jb3JlIGljaSBkZSBgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzYCwgbWFpcyBlbGxlcyBkb2l2ZW50IMOqdHJlIHLDqWRpZ8OpZXMgbWFudWVsbGVtZW50KS4NCg0KPC9icj4NCg0KIyMjIFRyb2lzIGZvcm1hdHMgZGUgZmFjZXR0ZXM6DQoNCk9uIHJldHJvdXZlIMOpZ2FsZW1lbnQgZGlmZsOpcmVudHMgKipmb3JtYXRzIGRlIGZhY2V0dGVzKiogLT4gdW5lIHBvdXIgY2hhcXVlIGZvcm1hdCBkZSBkb25uw6llcyAgDQoNCjEuIGBGYWNldHRlIHRleHR1ZWxsZWAgWzQtNV0gIA0KDQoyLiBgRmFjZXR0ZSBudW3DqXJpcXVlYCAgWzddICANCg0KMy4gYEZhY2V0dGUgY2hyb25vbG9naXF1ZWAgWzZdICANCg0KLSBMZXMgZmFjZXR0ZXMgcGVyc29ubmFsaXPDqWVzIHByb3Bvc2VudCBhdXNzaSBkZXMgZmFjZXR0ZXMgYm9vbMOpZW5uZXMuICANCg0KPC9icj4NCg0KPGNlbnRlcj4gIA0KDQohW10oaW1hZ2VzL09SMjMuanBnKQ0KPC9jZW50ZXI+ICANCg0KLSAqKls4XSoqIExlIGxpZW4gYGNoYW5nZXJgIHBlcm1ldCBkJ291dnJpciB1bmUgZmVuw6p0cmUgZCfDqWRpdGlvbiBHUkVMIHBvdXIgbW9kaWZpZXIgbGEgc3ludGF4ZSBkZSBsYSBmYWNldHRlLiAgDQotICoqWzldKiogUG91ciBzdXBwcmltZXIgbGVzIGZhY2V0dGVzLCBjbGlxdWVyIHN1ciBsZSB4IGRlIGNoYXF1ZSBmZW7DqnRyZSBvdSBgVG91dCBzdXBwcmltZXJgLiAgDQotIFBvdXIgY29uc2VydmVyIGxlcyBmZW7DqnRyZXMgbWFpcyBzdXBwcmltZXIgbGVzIHPDqWxlY3Rpb25zIHF1aSB5IG9udCDDqXTDqSBmYWl0ZXMsIGNsaXF1ZXIgc3VyIGByw6lpbnRpYWxpc2VyYCBzdXIgY2hhcXVlIGZlbsOqdHJlIG91IGBUb3V0IHLDqWluaXRpYWxpc2VyYCAqKls5XSoqLiAgDQotICoqWzEwXSoqIE9wdGlvbiBgR3JvdXBlYDogT3V0aWxzIHByb3Bvc2FudCBkaWZmw6lyZW50cyBhbGdvcml0aG1lcyBkZSBzaW1pbGFyaXTDqSBwZXJtZXR0YW50IGRlIHJlZ3JvdXBlciBkZXMgY2F0w6lnb3JpZXMgc2VtYmxhYmxlcy4gIA0KDQo8L2JyPg0KDQojIyMjIDEuIEZhY2V0dGUgdGV4dHVlbGxlIFs0LTVdIA0KDQotIFR5cGUgZGUgZmFjZXR0ZSBsZSBwbHVzIHNvdXZlbnQgdXRpbGlzw6kuICANCg0KLSBSZWdyb3VwZW50IGRhbnMgbGEgZmVuw6p0cmUgZGUgZ2F1Y2hlIGxlcyB2YWxldXJzIGRpc3RpbmN0ZXMgKHRleHR1ZWxsZXMgb3UgbnVtw6lyaXF1ZXMpIGRlcyBjb2xvbm5lcyB2b3VsdWVzLiAgDQogIC0gT24gcGV1dCBmYWlyZSB1bmUgZmFjZXR0ZSB0ZXh0dWVsbGUgc3VyIHVuZSBjb2xvbm5lIG51bcOpcmlxdWUgbWFpcyBwYXMgbCdpbnZlcnNlLiAgDQogIC0gMjAwMCB2YWxldXJzIG1heGltdW0gcGFyIGTDqWZhdXQgbWFpcyBwZXV0IMOqdHJlIG1vZGlmacOpIGRhbnMgbGVzIHByw6lmw6lyZW5jZXMuIFNpIGxlcyB2YWxldXJzIHNvbnQgdHJvcCBub21icmV1c2VzLCBlbGxlcyBuZSBzZXJvbnQgcGFzIGxpc3TDqWVzICh1biBmaWx0cmUgcG91cnJhaXQgw6p0cmUgdXRpbGlzw6kpLiANCiAgDQotIFBlcm1ldHRlbnQgZGUgY29tYmluZXIgZGlmZsOpcmVudHMgZmlsdHJlcyBlbiBzw6lsZWN0aW9ubmFudCBkaWZmw6lyZW50ZXMgdmFsZXVycyBkJ3VuZSBvdSBwbHVzaWV1cnMgdmFyaWFibGVzIChldCBsZXVycyBjYXMgY29ycmVzcG9uZGFudHMpLiAgDQogIC0gQ2xpcXVlciBgaW5jbHVyZWAgb3UgYGV4Y2x1cmVgIHBvdXIgc8OpbGVjdGlvbm5lciBvdSBzdXBwcmltZXIgZGVzIGNob2l4IG11bHRpcGxlcyAqKlsxMl0qKi4gIA0KICAtIFVuZSBmb2lzIGxhIHPDqWxlY3Rpb24gZmFpdGUsIGwnb3B0aW9uIGBpbnZlcnNlcmAgcGVybWV0IGRlIHPDqWxlY3Rpb25uZXIgdG91dCBTQVVGIGxhIHPDqWxlY3Rpb24gKipbMTFdKiouICANCiAgLSBQZXV2ZW50IMOqdHJlIHRyacOpZXMgc2Vsb24gbGUgbm9tIG91IGxlIGNvbXB0ZSAobm9tYnJlIGQnb2NjdXJyZW5jZSkuICANCi0gUGVybWV0dGVudCAqKmTigJnDqWRpdGVyIGxlcyB2YWxldXJzKiogKGNvbnRlbnUgZGUgY2hhcXVlIGNlbGx1bGUgY29ycmVzcG9uZGFudGUpICoqWzEzXSoqLiAgDQoNCjwvYnI+DQoNCiMjIyMgMi4gRmFjZXR0ZSBudW3DqXJpcXVlIFs3XQ0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIHZhcmlhYmxlIG51bcOpcmlxdWUgYWxsYW50IGRlIGxhIHBsdXMgcGV0aXRlIMOgIGxhIHBsdXMgZ3JhbmRlLiAgDQoNCjwvYnI+DQoNCiMjIyMgMy4gRmFjZXR0ZSBjaHJvbm9sb2dpcXVlIFs2XQ0KDQotIFZpc3VhbGlzZXIgZXQgc8OpbGVjdGlvbm5lciBsZXMgdmFsZXVycyBk4oCZdW5lIGNvbG9ubmUgZGF0ZSBlbiBsaWduZSBkdSB0ZW1wcy4gIA0KDQoNCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipGaWx0cmVyKiogDQoNCi0gRXhwbG9yZXIgbGVzIHZhbGV1cnMgZGUgbGEgdmFyaWFibGUgKkNhdXNlIHByaW1haXJlKi4gUXVlbGxlIGVzdCBsYSBkZXV4acOobWUgcGx1cyBmcsOpcXVlbnRlPyANCi0gUXVlbGxlcyBzb250IGxlcyBjYXTDqWdvcmllcyBkZSAqQ2F1c2Ugc2Vjb25kYWlyZSogcmVsacOpZXMgw6AgbGEgKkNhdXNlIHByaW1haXJlICJDbGllbnTDqGxlIio/ICAgDQotIFF1ZWxsZSBlc3QgbGEgcGx1cyBmcsOpcXVlbnRlPyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gQ29tYmllbiBkZSBjYXMgY29ycmVzcG9uZGVudCDDoCBjZXR0ZSBzw6lsZWN0aW9uPyAgDQotIMOAIHF1ZWwgKmpvdXIgZGUgbGEgc2VtYWluZSogY2V0dGUgY2F1c2UgZXN0LWVsbGUgc3VydmVudWUgbGUgcGx1cyBzb3V2ZW50PyAgDQotIFLDqWluaXRpYWxpc2VyIHRvdXRlcyBsZXMgZmFjZXR0ZXMuDQoNCioqw4lkaXRlcioqICANCg0KLSBEYW5zIGxhIGZhY2V0dGUgKkNhdXNlIHByaW1haXJlKiwgcmVub21tZXIgbGEgdmFsZXVyICNORCAtPiBOQS4gIA0KLSBDb3JyaWdlciBsYSB2YWxldXIgImF1dHJlIiBwb3VyIHF1J2VsbGUgc29pdCBmdXNpb25uw6llIMOgIGxhIHZhbGV1ciAiQXV0cmVzIi4gIA0KLSBTdXBwcmltZXIgdG91dGVzIGxlcyBmYWNldHRlcy4NCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKkZpbHRyZXIqKiANCg0KLSBRdWVsIGVzdCBsZSAqc3ltcHRvbWUqIGxlIHBsdXMgZnLDqXF1ZW50PyBTw6lsZWN0aW9ubmVyIGNldHRlIHZhbGV1ci4gIA0KLSBTdXIgcXVlbGxlICpMaWduZSogY2UgKnN5bXB0b21lKiBzJ2VzdCBwcm9kdWl0IGxlIHBsdXMgc291dmVudD8gU8OpbGVjdGlvbm5lciBjZXR0ZSB2YWxldXIuICANCi0gQ2VzIMOpdsOpbmVtZW50cyBvbnQtaWxzIG7DqWNlc3NpdMOpIHVuZSAqw6l2YWN1YXRpb24qPyAgDQoNCioqw4lkaXRlcioqICANCi0gw4lkaXRlciBsYSB2YXJpYWJsZSAqw6l2YWN1YXRpb24qIGRlIGZhw6dvbiDDoCBjZSBxdSdpbCBuJ3kgYWl0IHF1ZSAqKmRldXggdmFsZXVycyoqIHBvc3NpYmxlczogT3VpIGV0IE5vbi4gIA0KPC9kaXY+DQoNCioqKg0KDQo8L2JyPg0KDQojIDguIExlcyByZWdyb3VwZW1lbnRzIChjbHVzdGVyaW5nKQ0KDQotIEZvbmN0aW9uIHF1aSBwZXJtZXQgZCdpZGVudGlmaWVyIGRhbnMgdW5lIGNvbG9ubmUgbGVzIHZhbGV1cnMgZGlzdGluY3RlcyBxdWkgcG91cnJhaWVudCBhdm9pciBsYSBtw6ptZSBzaWduaWZpY2F0aW9uIG91IHF1aSBwb3VycmFpZW50IMOqdHJlIHJlZ3JvdXDDqWVzIGRhbnMgdW5lIG3Dqm1lIGNhdMOpZ29yaWUgPSAidmFyaWF0aW9ucyBzdXIgbGUgbcOqbWUgdGjDqG1lIiDDqXZhbHXDqWVzIGVuIGZvbmN0aW9uIGRlIFtkaWZmw6lyZW50cyBhbGdvcml0aG1lc10oaHR0cHM6Ly9naXRodWIuY29tL09wZW5SZWZpbmUvT3BlblJlZmluZS93aWtpL0NsdXN0ZXJpbmctSW4tRGVwdGgpLiANCg0KLSBjaGFxdWUgc3VnZ2VzdGlvbiBkb2l0IMOqdHJlIGFwcHJvdXbDqWUgaW5kaXZpZHVlbGxlbWVudCBwb3VyIHF1ZSBsZXMgbW9kaWZpY2F0aW9ucyBzJ2FwcGxpcXVlbnQgKGxlcyByZWdyb3VwZW1lbnRzIHByb3Bvc8OpcyBuZSBzb250IHBhcyBuw6ljZXNzYWlyZW1lbnQgcGVydGluZW50cykuDQoNCi0gT3BlblJlZmluZSBwcm9wb3NlIGRlcyAqY2x1c3RlcnMqIHNlbG9uIGRpZmbDqXJlbnRlcyBtw6l0aG9kZXMgcGx1cyBvdSBtb2lucyDDqWxhYm9yw6llcyAoKlByb2NoZSB2b2lzaW4qIHByZW5kIHBsdXMgZGUgbcOpbW9pcmUpIHF1aSBwZXJtZXR0ZW50IGRlIHJlZ3JvdXBlciBsZXMgdmFsZXVycyBzaW1pbGFpcmVzIGV0IHByb3Bvc2VudCBkZXMgbWF0Y2hzIHBvc3NpYmxlcyAoKmZ1enp5IG1hdGNoaW5nKik6IHBhciBleGVtcGxlICplbXByZWludGUqIGVzdCBwbHVzIGNvbnNlcnZhdGV1ciAoZGlzdGluZ3VlIGNhc3NlLCBlc3BhY2VzLCBvcmRyZSwgcsOpcMOpdGl0aW9uLCBwb25jdHVhdGlvbi4uLiksICpuZ3JhbSogZXN0IHBsdXMgZmxleGlibGUgKG3Dqm1lcyBjYXJhY3TDqHJlcyksICpNZXRhcGhvbmUzKiBlc3QgbGUgcGx1cyAibGliw6lyYWwiIChtw6ptZSBwcm9ub25jaWF0aW9uKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gQ3LDqWVyIHVuZSBmYWNldHRlIHRleHR1ZWxsZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1Ki4gIA0KLSBDbGlxdWVyIHN1ciBgR3JvdXBlYCBldCBleHBsb3JlciBsZXMgcmVncm91cGVtZW50cyBlbiBmb25jdGlvbiBkZXMgZGlmZsOpcmVudHMgYWxnb3JpdGhtZXMuICANCjwvZGl2Pg0KDQoqKioNCg0KPC9icj4NCg0KIyA5LiBHUkVMIGV0IGxlcyBmYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgDQoNCg0KLSBGb25jdGlvbm5lbnQgY29tbWUgZGVzIGZhY2V0dGVzIGF1dG9tYXRpc8OpZXMgc2F1ZiBxdSdvbiBuZSBwZXV0IMOpZGl0ZXIgZW4gZm9uY3Rpb24gZGUgY2VzIHLDqXN1bHRhdHMgY2FyIGVsbGVzIHByw6lzZW50ZW50IGRlcyBkb25uw6llcyBtb2RpZmnDqWVzIGVuIG3DqW1vaXJlLg0KDQotIE9udCDDqXTDqSBkw6l2ZWxvcHDDqWVzIGV0IGF1dG9tYXRpc8OpZXMgYWZpbiBkJ2V4cGxvcmVyIGRlcyBhc3BlY3RzIHByw6ljaXMgZGVzIGRvbm7DqWVzIHNhbnMgYXZvaXIgw6AgbGVzICByw6lkaWdlciBlbiBzeW50YXhlIEdSRUw6IA0KDQogIC0gYEZhY2V0dGUgcGFyIG1vdGAgOiBEaXZpc2UgY2hhcXVlIG1vdCAoc8OpcGFyw6kgZCd1biBlc3BhY2UpIGQndW5lIGNvbG9ubmUgZXQgbGVzIHByw6lzZW50ZSBlbiBsaXN0ZSBkZSB2YWxldXJzIGRpc3RpbmN0ZXMgW3ZhbHVlLnNwbGl0KCIgIildLg0KICANCiAgLSBgRmFjZXR0ZSBkb3VibG9uc2A6IHZhbGV1cnMgYm9vbMOpZW5uZXMgaW5kaXF1YW50IHNpIGxlcyB2YWxldXJzIHNvbnQgdW5pcXVlcyAoZmFsc2UpIG91IG5vbiAodHJ1ZSkgW2ZhY2V0Q291bnQodmFsdWUsICd2YWx1ZScsICdTeW1wdG9tZScpID4gMV0uICANCiAgDQogIC0gYEZhY2V0dGVzIGxvZ2FyaXRobWlxdWVzYDogbW9kaWZpY2F0aW9uIGxvZ2FyaXRobWlxdWUgZGUgdmFsZXVycyBudW3DqXJpcXVlcyBbdmFsdWUubG9nKCldLg0KICANCiAgLSBgRmFjZXR0ZSBsb25ndWV1ciBkZSB0ZXh0ZWA6IGxpc3RlIGxlIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBkdSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIFt2YWx1ZS5sZW5ndGgoKV0uDQogIA0KICAtIEZhY2V0dGVzIHBlcm1ldHRhbnQgZCdleHBsb3JlciBsZXMgdmFsZXVycyBkJ2BlcnJldXJgLCBgbnVsbGVzYCwgYHZpZGVzYC4uLiBbaXNFbXB0eVN0cmluZyh2YWx1ZSldDQoNCioqKiANCg0KPC9icj4NCg0KIyMjIEdSRUwgLSBwcmluY2lwZXMgZGUgYmFzZSAgDQoNCi0gKkdvb2dsZSBSZWZpbmUgRXhwcmVzc2lvbiBMYW5ndWFnZSogDQotIExhbmdhZ2Ugc2ltaWxhaXJlIMOgIGphdmFzY3JpcHQgZXQgZm9ybXVsZXMgZXhjZWwuICAgIA0KLSBQZXJtZXQgbGEgcsOpZGFjdGlvbiBkJ2V4cHJlc3Npb25zIHZpc2FudCDDoCBtYW5pcHVsZXIvdHJhbnNmb3JtZXIgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZCd1bmUgY29sb25uZS4gIA0KKFZvaXIgbGEgW2RvY3VtZW50YXRpb24gb2ZmaWNpZWxsZV0oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsKSBwb3VyIHBsdXMgZGUgZMOpdGFpbHMpICANCi0gTGFuZ2FnZSBjb21wb3PDqSBkZSBbZm9uY3Rpb25zXShodHRwczovL2RvY3Mub3BlbnJlZmluZS5vcmcvbWFudWFsL2dyZWxmdW5jdGlvbnMpIGV0IGQnW29iamV0c10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9leHByZXNzaW9ucyN2YXJpYWJsZXMpLg0KDQo8L2JyPg0KDQojIyMjIFV0aWxpc2UgdW5lIHN5bnRheGUgcGFydGljdWxpw6hyZSBwb3VyIGNpYmxlciBsZXMgb2JqZXRzICh2YXJpYWJsZXMpOiAgDQotIENvbnRlbnUgZGUgY29sb25uZSBhY3R1ZWxsZTogYHZhbHVlYC4gICAgIA0KLSBDb250ZW51IGQndW5lIGF1dHJlIGNvbG9ubmU6IGBjZWxsc1snbm9tLWNvbG9ubmUnXS52YWx1ZWAuICAgIA0KLSBDb250ZW51IHRleHR1ZWw6ICJndWlsbGVtZXQgc2ltcGxlIG91IGRvdWJsZSIuICAgIA0KDQo8L2JyPg0KDQojIyMjIERldXggZm9ybWF0cyBkZSBub3RhdGlvbjogIA0KLSBJbWJyaXF1w6llOiAodHJpbSh0b0xvd2VyY2FzZSh2YWx1ZSkpLiAgICANCi0gKipTw6lxdWVudGllbGxlKio6IHZhbHVlLnRvTG93ZXJjYXNlKCkudHJpbSgpIChwbHVzIGZhY2lsZSDDoCBsaXJlKS4gICAgDQoNCjwvYnI+DQoNCiMjIyMgRGlmZsOpcmVudHMgdHlwZXMgZGUgZm9uY3Rpb25zOiAgDQotIExlcyBmb25jdGlvbnMgZXQgbGV1ciBjb21wb3J0ZW1lbnQgZMOpcGVuZHJvbnQgZHUgdHlwZSBkZSBkb25uw6llcyBtYW5pcHVsw6llcy4gIA0KLSBbQ2VydGFpbmVzIGZvbmN0aW9uc10oaHR0cHM6Ly9kb2NzLm9wZW5yZWZpbmUub3JnL21hbnVhbC9ncmVsZnVuY3Rpb25zI3NsaWNlYS1uLWZyb20tbi10by1vcHRpb25hbCkgcGVybWV0dGVudCBkZSB0cmFuc2Zvcm1lciBsZSBjb250ZW51IGRlIGNlbGx1bGVzIGVuIGBhcnJheXNgIChsaXN0ZSBkJ8OpbMOpbWVudHMpIGV0IGRlIGxlcyBtYW5pcHVsZXIuICANCi0gW0NlcnRhaW5lcyBmb25jdGlvbnNdKGh0dHBzOi8vZG9jcy5vcGVucmVmaW5lLm9yZy9tYW51YWwvZXhwcmVzc2lvbnMjcmVndWxhci1leHByZXNzaW9ucykgcGVybWV0dGVudCBkJ3V0aWxpc2VyIGxlcyBbZXhwcmVzc2lvbnMgcsOpZ3VsacOocmVzXSgjZXhwcmVzc2lvbikuICANCg0KPC9icj4NCg0KU2Vsb24gbGUgZm9ybWF0LCBkaWZmw6lyZW50cyB0eXBlcyBkJyoqb3DDqXJhdGV1cnMqKiBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcyBlbnRyZSBsZXMgdmFsZXVyczogIA0KCS0gT3DDqXJhdGV1cnMgYXJpdGhtw6l0aXF1ZXM6ICssIC0sICosIC8gIA0KCS0gT3DDqXJhdGV1cnMgYm9vbMOpZW5zOiA9PSwgPiwgPCAgDQogIA0KUGFyIGV4ZW1wbGU6DQoNCi0gTGUgIisiIGVudHJlIGRldXggY29udGVudXMgbnVtw6lyaXF1ZXMgPSBzb21tZQ0KDQohW10oaW1hZ2VzL09SMzAuanBnKQ0KDQotIExlICIrIiBhdmVjIHVuIGNvbnRlbnUgdGV4dHVlbCA9IGNvbmNhdMOpbmF0aW9uDQoNCiFbXShpbWFnZXMvT1IzMS5qcGcpDQoNCjwvYnI+DQoNCi0gQ2hhcXVlIGNhcmFjdMOocmUgY29tcG9zYW50IHVuZSB2YWxldXIgZXN0IG9yZG9ubsOpIGRhbnMgdW4gaW5kZXggKirDoCBwYXJ0aXIgZGUgMCoqICgxZXIgw6lsw6ltZW50KSBldCBwZXV0IMOqdHJlIGNpYmzDqSBncsOiY2UgYXV4IGBbIF1gLg0KLSBEZSBsYSBtw6ptZSBmYcOnb24sIGNoYXF1ZSDDqWzDqW1lbnQgZCd1biAqYXJyYXkqIGVzdCBvcmRvbm7DqSBkYW5zIHVuIGluZGV4ICoqw6AgcGFydGlyIGRlIDAqKiAoMWVyIMOpbMOpbWVudCkgZXQgcGV1dCDDqnRyZSBjaWJsw6kgZ3LDomNlIGF1eCBgWyBdYC4gIA0KDQo+IGB2YWx1ZS5zcGxpdCgnKCcpWzFdYCAtPiBNb250csOpYWwgKFF1w6liZWMpID0gPyAgDQo+IGB2YWx1ZS5zcGxpdCgnKCcpWzFdLnNwbGl0KCcpJylbMF1gIC0+IE1vbnRyw6lhbCAoUXXDqWJlYykgPSA/ICANCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SMjUuanBnKQ0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1IyNi5qcGcpDQoNCjwvYnI+DQoNCsOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWVyIC0+IGB2YWx1ZS5zcGxpdCgiOyAiKS5zbGljZSgxKS5qb2luKCI7ICIpYCANCg0KIVtdKGltYWdlcy9PUjI3LmpwZykNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SMjguanBnKQ0KDQo8L2JyPg0KDQrDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1lciAtPiBgdmFsdWUuc3BsaXQoL1xuLykuc2xpY2UoMSkuam9pbigiOyAiKWAgDQoNCiFbXShpbWFnZXMvT1IyOS5qcGcpDQoNCjwvYnI+DQoNCiMjIEV4ZXJjaWNlDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCkNyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSAqQ29kZSBkZSBsaWV1KiBwb3VyIGlkZW50aWZpZXIgbGVzIGNhcyBkb250IGxhIHZhbGV1ciBjb21tZW5jZSBwYXIgIkPDtHRlIiAgDQoNCmB2YWx1ZS5zdGFydHNXaXRoKOKAnEPDtHRl4oCdKWAgICAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpDcsOpZXIgdW5lIGZhY2V0dGUgcG91ciBpZGVudGlmaWVyIGxlcyBjYXMgZG9udCBsYSB2YWxldXIgZGFucyBsZSBjb2xvbm5lICpDYXVzZSBwcmltYWlyZSogZXN0IGxhIG3Dqm1lIHF1ZSBkYW5zIGxhIGNvbG9ubmUgKkNhdXNlIHNlY29uZGFpcmUqDQoNCmB2YWx1ZSA9PSBjZWxsc1siQ2F1c2Ugc2Vjb25kYWlyZSJdLnZhbHVlYCAgIA0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KQ3LDqWVyIHVuZSBmYWNldHRlIHBvdXIgbGlzdGVyIGxlcyBjYXMgc2Vsb24gbCcqaGV1cmUgZGUgbCdpbmNpZGVudCogc2V1bGVtZW50LCBzYW5zIGxlcyBtaW51dGVzICgyIHByZW1pZXJzIGNhcmFjdMOocmVzKS4gQ29tbWVudCBmYWlyZSBhZmZpY2hlciBsZXMgbWludXRlcyBzZXVsZW1lbnQ/Xlt2YWx1ZVszLDVdIG91IHZhbHVlLnN1YnN0cmluZygzKV0gDQoNCmB2YWx1ZVswLDJdYCAgIA0KDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCioqKg0KDQo8L2JyPg0KDQojIDEwLiAgVHJhbnNmb3JtYXRpb25zDQoNCi0gT3BlblJlZmluZSBwZXJtZXQgZCdleHBsb3JlciBtYWlzIGF1c3NpIGRlIG1vZGlmaWVyIHNlcyBkb25uw6llcyBzYW5zIGF2b2lyIMOgIHRvdWNoZXIgYXUgY29udGVudSBkZSBjZWxsdWxlcyBtYW51ZWxsZW1lbnQuICANCg0KLSBDb21tZSBwb3VyIGxlcyBmYWNldHRlcywgbGVzIGZvbmN0aW9ucyBkZSB0cmFuc2Zvcm1hdGlvbiBwZXV2ZW50IHNlIGZhaXJlIGRlIGRldXggZmHDp29uczogICAgDQoNCiAgMS4gVHJhbnNmb3JtYXRpb25zIGF1dG9tYXRpc8OpZXMgKGBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzYCkgKipbMl0qKjogZm9uY3Rpb25zIHBlcm1ldHRhbnQgZCdhcHBsaXF1ZXIgZGVzIG1vZGlmaWNhdGlvbnMgY291cmFudGVzIHN1ciBsZSBmb3JtYXQgZXQgbGEgc3RydWN0dXJlIGRlcyBjZWxsdWxlcy9jb2xvbm5lcy4gIA0KICANCiAgMi4gVHJhbnNmb3JtYXRpb25zIG1hbnVlbGxlcyBkYW5zIGxhIGZlbsOqdHJlIEdSRUwgKipbMV0qKiBhZmluIGQnYWxsZXIgYmVhdWNvdXAgcGx1cyBsb2luLiAgDQogIA0KDQohW10oaW1hZ2VzL09SMjQuanBnKQ0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KUG91ciB2b2lyIGxhIHN5bnRheGUgY29ycmVzcG9uZGFudCDDoCBjaGFxdWUgZm9uY3Rpb24gZGUgYHRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXNgLCBhcHBsaXF1ZXIgbGEgZm9uY3Rpb24gc3VyIHVuZSBjb2xvbm5lIHB1aXMgYWxsZXIgdm9pciBsJ2hpc3RvcmlxdWUuIFBhciBleGVtcGxlOiBgdmFsdWUudG9OdW1iZXIoKWAsIGB2YWx1ZS50b1RpdGxlY2FzZSgpYCwgYHZhbHVlLnRvTnVtYmVyKClgLCBgdmFsdWUudG9VcHBlcmNhc2UoKWAsIGB2YWx1ZS50cmltKClgLi4uIDwvZGl2Pg0KDQoqKioNCg0KIyMgMTAuMSBDcsOpZXIgZXQgY29waWVyIGRlcyBjb2xvbm5lcw0KDQo8L2JyPg0KDQpgw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZWANCg0KIVtdKGltYWdlcy9PUjMyLmpwZykNCg0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIHN1ciBsYSBiYXNlIGRlIGxhIGNvbG9ubmUgKkpvdXIgZGUgbGEgc2VtYWluZSogaW5kaXF1YW50IHNpIGxlIGpvdXIgZXN0IGVuIHNlbWFpbmUgb3UgZmluIGRlIHNlbWFpbmUuDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpgaWYodmFsdWUgPiA1LCJmaW4gZGUgc2VtYWluZSIsInNlbWFpbmUiKWANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KQ3LDqWVyIHVuZSBjb2xvbm5lIMOgIHBhcnRpciBkZSBsYSBjb2xvbm5lICpoZXVyZSBkZSBsJ2luY2lkZW50KiBlbiBuZSBjb25zZXJ2YW50IHF1ZSBsJ2hldXJlLCBzYW5zIGxlcyBtaW51dGVzLCBldCByYWpvdXRlciBsYSBsZXR0cmUgaCBwb3VyIGRvbm5lciBwYXIgZXhlbXBsZSBjZWNpOiAxNToxMiAgLT4gIDE1aC4gIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KYHZhbHVlLnNwbGl0KCc6JylbMF0gKyAiaCJgLiAgDQoNCk91DQoNCmB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygyKVswXWAuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKiogDQoNCjwvYnI+DQoNCiMjIDEwLjIuIERpdmlzZXIgbGUgY29udGVudSBkZSBjZWxsdWxlcyBtdWx0aXZhcmnDqWVzDQoNCi0gKipEZXV4IG9wdGlvbnM6ICoqICANCiAgMS4gRW4gZGl2aXNhbnQgbGUgY29udGVudSBkZXMgY2VsbHVsZXMgZW4gKipwbHVzaWV1cnMgY29sb25uZXMqKjogYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lc2AgIA0KICAyLiBFbiBkaXZpc2FudCBsZSBjb250ZW51IHN1ciAqKnBsdXNpZXVycyBsaWduZXMqKjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IERpdmlzZXIgbGVzIGNlbGx1bGVzIG11bHRpdmFyacOpZXNgICANCg0KPC9icj4NCg0KIVtdKGltYWdlcy9PUjM3LmpwZykgIA0KDQotIExhIHByZW1pw6hyZSBvcHRpb24gZXN0IGxhIHBsdXMgZnLDqXF1ZW50ZS4gDQotIExhIGRldXhpw6htZSBvcHRpb24gYXVyYSB1biBlZmZldCBpbXBvcnRhbnQgc3VyIGxhIHN0cnVjdHVyZSBkZXMgb2JzZXJ2YXRpb25zIHB1aXNxdSdlbGxlIG11bHRpcGxpZXJhIGxlIG5vbWJyZSBkZSBsaWduZXMgcGFyIGNhcyAoY2UgcXVpIG7DqWNlc3NpdGVyYSBkZSBwYXNzZXIgw6AgbGEgdnVlIHBhciBgZW50csOpZXNgKS4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NClRyYW5zZm9ybWVyIGxhIHZhcmlhYmxlICpMaWduZSoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCioqVW5pZm9ybWlzZXIgbGUgbm9tIGRlcyBsaWduZXM6KiogIA0KDQotIENyw6llciB1bmUgZmFjZXR0ZSBzdXIgbGEgY29sb25uZSBMaWduZS4gDQoNCi0gRGV1eCBwcm9ibMOobWVzIHNlIHBvc2VudDogMSkgbGVzIG5vbXMgZGUgbGlnbmVzIG5vbiB1bmlmb3JtZXMgZXQgMikgbGVzIHZhbGV1cnMgbXVsdGlwbGVzLiAgDQoNCi0gTm91cyBjaG9pc2lzc29ucyBkJ3VuaWZvcm1pc2VyIGxlcyB2YWxldXJzIGVuIHV0aWxpc2FudCBsZXMgbnVtw6lyb3MgZGUgbGlnbmVzIGV0IGVuIHN1cHByaW1hbnQgbGUgbW90IExpZ25lLiAgDQoNCi0gRXhwbG9yZXIgZXQgYWNjZXB0ZXIgbGVzIHJlZ3JvdXBlbWVudHMgcHJvcG9zw6lzIGF2ZWMgbGEgZm9uY3Rpb24gYEdyb3VwZWAuICANCg0KLSBTdXBwcmltZXIgbGUgbW90IGxpZ25lOiAgDQoNCiAgLSBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gcmVtcGxhY2VyYCAtPiAiTGlnbmUiIHBhcjogbmUgcmllbiBzYWlzaXIgZGFucyBsJ2VuY2FkcsOpLiAgICANCg0KLSBDbGlxdWVyIGVuc3VpdGUgZGlyZWN0ZW1lbnQgc3VyIGBlZGl0YCBzdXIgdW5lIGNlbGx1bGUgZGUgbGEgY29sb25uZSBkZSAqTGlnbmUqIC0+IHJlbWFycXVlciBsYSBwcsOpc2VuY2UgZCd1biBlc3BhY2UsIHN1cHByaW1lciBsJ2VzcGFjZSBldCBmZXJtZXIuIA0KDQotIFJhZnJhaWNoaXIgbGEgZmFjZXR0ZSBldCBvYnNlcnZlciBsJ2ltcGFjdC4gDQoNCi0gUmVtYXJxdWVyIGwnaW1wYWN0IGRlIGwnZXNwYWNlIGRhbnMgbGEgZmFjZXR0ZS4gQ2VzIGVzcGFjZXMgcGV1dmVudCDDqnRyZSBzdXBwcmltw6lzIGdyw6JjZSDDoCBsYSBmb25jdGlvbjogYMOJZGl0ZXIgbGVzIGNlbGx1bGVzIC0+IFRyYW5zZm9ybWF0aW9ucyBjb3VyYW50ZXMgLT4gU3VwcHJpbWVyIGxlcyBlc3BhY2VzIGRlIGTDqWJ1dCBldCBkZSBmaW5gLiAgIA0KLSBSZW1wbGFjZXIgbGVzIGNvdWxldXJzIGRlIGxpZ25lIHBhciBsZXVyIG51bcOpcm8gZGlyZWN0ZW1lbnQgZGFucyBsYSBmYWNldHRlLiAgIA0KPC9kaXY+DQoNCg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KKipEaXZpc2VyIGxlIGNvbnRlbnUgZGVzIGNlbGx1bGVzIGVuIGNyw6lhbnQgZGVzIGNvbG9ubmVzIGF2ZWMgdW5lIHNldWxlIHZhbGV1ciAgKioNCg0KLSBEYW5zIGxhIGZhY2V0dGUsIHJlbXBsYWNlciBsZXMgIi0iIHBhciBkZXMgIiwiLiAgICANCg0KLSBgw4lkaXRlciBsYSBjb2xvbm5lIC0+IERpdmlzZXIgZW4gcGx1c2lldXJzIGNvbG9ubmVzYDoNCiAgLSBEw6lmaW5pciBsZSBzw6lwYXJhdGV1ciAiLCIgKGNlbHVpLWNpIGRpc3BhcmFpdHJhKS4gIA0KICAtIETDqWNvY2hlciBsZXMgb3B0aW9ucyAiRGV2aW5lciIgZXQgIlN1cHByaW1lciIuICANCi0gTGVzIG5vdXZlbGxlcyBjb2xvbm5lcyByZXByZW5kcm9udCBsZSBub20gZGUgbCdvcmlnaW5hbCBudW3DqXJvdMOpLiBMZXMgcmVub21tZXI6IHByZW1pZXJlLCBkZXV4aWVtZSwgdHJvaXNpZW1lLCBxdWF0cmllbWUuICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KRGl2aXNlciBwYXIgbGVzIGxvbmd1ZXVycyBkZSBjaGFtcHMgbGEgY29sb25uZSBgTnVtw6lybyBkJ2luY2lkZW50YCBwb3VyIGVuIGNyw6llciBkZXV4IG5vdXZlbGxlczogIA0KICAxLiBVbmUgY29sb25uZSBjb250ZW5hbnQgbGUgcHJlbWllciBjYXJhY3TDqHJlIGluZGlxdWFudCBsZSB0eXBlIGQnaW5jaWRlbnQsIHNvaXQgVCAodHJhaW4pIG91IFMgKHNlcnZpY2UpLiAgDQogIDIuIFVuZSBjb2xvbm5lIGNvbnRlbmFudCBsJ2Vuc2VtYmxlIGRlcyBjYXJhY3TDqHJlcyBudW3DqXJpcXVlcyBpbmRpcXVhbnQgbGUgbnVtw6lybyBkJ2luY2lkZW50LiAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoqKlbDqXJpZmljYXRpb25zIHByw6lhbGFibGVzOioqDQogIDEuIFbDqXJpZmllciBxdSdpbCBuJ3kgYSBwYXMgZGUgZG91YmxvbiBkYW5zIGNldHRlIGNvbG9ubmU6IGBGYWNldHRlcyBwZXJzb25uYWxpc8OpZXMgLT4gRmFjZXR0ZSBkb3VibG9uYCAtPiBRdWVsIGVzdCBsZSBwcm9ibMOobWU/ICBDbGlxdWVyIHN1ciBgQ2hhbmdlcmAgZXQgYW5hbHlzZXIgbCdleHByZXNzaW9uLiAgDQogIDIuIFbDqXJpZmllciBsYSBsb25ndWV1ciBkZSBjaGFxdWUgY2FzOiAgYEZhY2V0dGVzIHBlcnNvbm5hbGlzw6llcyAtPiBGYWNldHRlIGxvbmd1ZXVyIGR1IHRleHRlYC4gICAgDQoNCioqRGl2aXNlciBsYSBjb2xvbm5lOioqICANCi0gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBEaXZpc2VyIGVuIHBsdXNpZXVycyBjb2xvbm5lcyBzZWxvbiBsZXMgbG9uZ3VldXJzIGRlIGNoYW1wc2AgOiAxLCA4LiAgICANCi0gRMOpY29jaGVyIDogZGV2aW5lciBsZSB0eXBlIGRlIGNlbGx1bGUgZXQgU3VwcHJpbWVyIGNldHRlIGNvbG9ubmUuICAgIA0KLSBSZW5vbW1lciBsZXMgY29sb25uZXMgOiBUeXBlIGV0IElELiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQoqKioNCg0KPC9icj4NCg0KIyMjIFJlY2hlcmNoZXIvcmVtcGxhY2VyIHVuIGNhcmFjdMOocmUgZGFucyB0b3V0ZXMgbGVzIGNvbG9ubmVzIGF2ZWMgR1JFTA0KDQojIyBFeGVyY2ljZQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KUmVtcGxhY2VyIGxlcyB2YWxldXJzICIjIiBkYW5zIHRvdXRlIGxhIGJhc2UgZGUgZG9ubsOpZXMgcGFyICJhdWN1biIqKiAgIA0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KLSBRdWVsIHByb2Jsw6htZSBjZSByZW1wbGFjZW1lbnQgcGV1dC1pbCBwcm92b3F1ZXI/ICAgIA0KLSBFeHBsb3JlciBsJ2ltcGFjdCBkZXMgdHJvaXMgZXhwcmVzc2lvbnMgZGUgcmVtcGxhY2VtZW50IHN1aXZhbnRlczogIA0KDQoxLiBgdmFsdWUucmVwbGFjZSgiIyIsICJhdWN1biIpYCAgIA0KKHJlbXBsYWNlIGxlIGNhcmFjdMOocmUgIzogYXVjdW4gZXQgYXVjdW5OL0QgKSAgICAgDQogDQoyLiBgaWYodmFsdWUuY29udGFpbnMoIiMiKSwiYXVjdW4iLCB2YWx1ZSlgICAgDQoocmVtcGxhY2UgbGVzIGNlbGx1bGVzIGRlcyAjIGV0ICNORCBwYXIgYXVjdW4pICANCg0KMy4gYGlmKHZhbHVlPT0oIiMiKSwiYXVjdW4iLCB2YWx1ZSlgICAgICANCihyZW1wbGFjZSBzZXVsZW1lbnQgbGVzIGNlbGx1bGVzICMsIHBhcyBsZXMgI05EIHBhciBhdWN1bikgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCjwvYnI+DQoNCiMjIDEwLjMuIEZ1c2lvbm5lciBsZSBjb250ZW51IGRlIHBsdXNpZXVycyBjb2xvbm5lcw0KDQojIyMgRMOpZml0ICAgDQpOb3VzIHNvdWhhaXRvbnMgY2FsY3VsZXIgbGEgZHVyw6llIGRlcyBpbmNpZGVudHMuIFBvdXIgY2UgZmFpcmUgbm91cyBjcsOpZXJvbnMgZGV1eCBjb2xvbm5lczogIA0KLSBVbmUgY29sb25uZSBmdXNpb25uYW50IGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Ki4gIA0KLSBVbmUgY29sb25uZSBmdXNpb25uYW50IGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Ki4gIA0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gIm5vdGUiPg0KTG9yc3F1ZSBsJ29uIGZ1c2lvbm5lIGRlcyBjb2xvbm5lcywgaWwgZmF1dCBwb3J0ZXIgdW5lIGF0dGVudGlvbiBwYXJ0aWN1bGnDqHJlIGF1IHPDqXBhcmF0ZXVyIGNob2lzaS4gTmUgcGFzIHV0aWxpc2VyIHVuIGNhcmFjdMOocmUgcXVpIHBvdXJyYWl0IGZhaXJlIHBhcnRpZSBkdSBjb250ZW51IChleDogLCkgb3UgcXVpIHNlcnZpcmEgw6AgZGl2aXNlciBsZXMgY29sb25uZXMgKC5jc3YpDQo8L2Rpdj4NCg0KPC9icj4NCg0KIyMgRXhlcmNpY2UNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCjEuICoqRm9uY3Rpb24gYXV0b21hdGlzw6llKiogLT4gRnVzaW9ubmVyIGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSBsJ2luY2lkZW50Kg0KPC9kaXY+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEFubsOpZSBjaXZpbGUgLT4gYMOJZGl0ZXIgbGEgY29sb25uZWAgLT4gYEpvaW5kcmUgbGVzIGNvbG9ubmVzYC4gICAgDQotIEpvaW5kcmUgZGVzIGNvbG9ubmVzIC0+IENvY2hlciBsZXMgY29sb25uZXMgdm91bHVlcy4gIA0KLSBTw6lwYXJhdGV1ciBlbnRyZSBsZSBjb250ZW51IGRlIGNoYXF1ZSBjb2xvbm5lOiAiLSIuICAgIA0KLSDDiWNyaXJlIGxlIHLDqXN1bHRhdCBkYW5zIHVuZSBub3V2ZWxsZSBjb2xvbm5lIG5vbW3DqWU6ICpEYXRlKi4gICAgDQoNCi0gVHJhbnNmb3JtZXIgZW4gZm9ybWF0IGRhdGU6IGDDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc2Zvcm1hdGlvbnMgY291cmFudGVzIC0+IEVuIGRhdGVgLiAgICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KMi4gKipGZW7DqnRyZSBHUkVMKiogLT4gRnVzaW9ubmVyIGxlcyBjb2xvbm5lczogKkFubsOpZSBjaXZpbGUqLCAqTW9pcyBjYWxlbmRyaWVyKiwgKmpvdXJzIGR1IG1vaXMqIGV0ICpIZXVyZSBkZSByZXByaXNlKg0KPC9kaXY+DQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIEFubsOpZSBjaXZpbGUgLT4gw4lkaXRlciBsYSBjb2xvbm5lIC0+IEFqb3V0ZXIgdW5lIGNvbG9ubmUgZW4gZm9uY3Rpb24gZGUgY2V0dGUgY29sb25uZTogIA0KDQpgY2VsbHNbIkFubsOpZSBjaXZpbGUiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJNb2lzIGNhbGVuZHJpZXIiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJKb3VyIGR1IG1vaXMiXS52YWx1ZSArICIgIiArICBjZWxsc1siSGV1cmUgZGUgbCdpbmNpZGVudCJdLnZhbHVlYC4gIA0KDQotIFbDqXJpZmllciBsYSB0cmFuc2Zvcm1hdGlvbiBhdmVjIHVuZSBmYWNldHRlIGB2YWx1ZS50eXBlKClgLiAgDQoNCi0gUmVjb21tZW5jZXIgbGEgam9pbnR1cmUgcG91ciBjcsOpZXIgdW5lIGNvbG9ubmUgYXZlYyBsYSBkYXRlLWhldXJlIGRlIGZpbiBkZSBsJ2luY2lkZW50DQpgY2VsbHNbIkFubsOpZSBjaXZpbGUiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJNb2lzIGNhbGVuZHJpZXIiXS52YWx1ZSArICItIiArICIwIiArIGNlbGxzWyJKb3VyIGR1IG1vaXMiXS52YWx1ZSArICIgIiArICBjZWxsc1siSGV1cmUgZGUgbCdpbmNpZGVudCJdLnZhbHVlYC4gIA0KDQotIFRyYW5zZm9ybWVyIGVuIGZvcm1hdCBkYXRlOiBgw4lkaXRlciBsZXMgY2VsbHVsZXMgLT4gVHJhbnNmb3JtYXRpb25zIGNvdXJhbnRlcyAtPiBFbiBkYXRlYC4gIA0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQpDYWxjdWxlciBsYSBkdXLDqWUgZGUgbCdpbmNpZGVudCAgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIHZpZGU6ICANCmBFZGl0IENvbHVtbiA+IEFkZCBDb2x1bW4gQmFzZWQgb24gVGhpcyBDb2x1bW4gYCAtPiBDaG9pc2lyIHVuIG5vdXZlYXUgbm9tIGV0IGxlIGNvbnRlbnU6ICIiLiAgDQoNCi0gUG91ciBjYWxjdWxlciB1bmUgZGlmZsOpcmVuY2UgZW50cmUgZGF0ZTogYGRpZmYoZGF0ZTEsIGRhdGUyLCAicmVzdWx0cyBmb3JtYXQiKWAuICAgIA0KDQpgZGlmZihjZWxsc1snZGF0ZTInXS52YWx1ZSxjZWxsc1snZGF0ZTEnXS52YWx1ZSwgJ21pbnV0ZXMnKWAuICAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCg0KPC9icj4NCg0KIyAxMS4gTGVzIGV4cHJlc3Npb25zIHLDqWd1bGnDqHJlcyB7I2V4cHJlc3Npb259DQoNCjwvYnI+DQoNCi0gTCd1c2FnZSBkZSBHUkVMIHBlcm1ldCBkZXMgbWFuaXB1bGF0aW9ucyBkZSBkb25uw6llcyBiZWF1Y291cCBwbHVzIGF2YW5jw6llcyBxdWUgbCd1dGlsaXNhdGlvbiBkZXMgZm9uY3Rpb25zIGF1dG9tYXRpc8OpZXMsIG1haXMgT3BlblJlZmluZSBwZXJtZXQgZW4gcGx1cyBkZSBjb21iaW5lciBsJ3V0aWxpc2F0aW9uIGRlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXMgYXZlYyBHUkVMIHBvdXIgZW4gYXVnbWVudGVyIGxhIHB1aXNzYW5jZS4gDQotIExlcyBleHByZXNzaW9ucyByw6lndWxpw6hyZXMgcGVybWV0dGVudCwgw6AgcGFydGlyIGQndW5lIHN5bnRheGUgc3DDqWNpZmlxdWUsIGQnaWRlbnRpZmllciBkZXMgcGF0dGVybnMgZGFucyB1biBjb250ZW51LiAgDQotIExvcnNxdSd1dGlsaXPDqWVzIGF2ZWMgR1JFTCwgY2VzIGV4cHJlc3Npb25zIHBlcm1ldHRlbnQgZG9uYyBkJ2lkZW50aWZpZXIgZXQgZCdleHRyYWlyZSBkZXMgY29udGVudXMgdHLDqHMgcHLDqWNpcyBwb3VyIGVuc3VpdGUgbGVzIG1hbmlwdWxlciBzZWxvbiBsZXMgYmVzb2lucy4gIA0KLSBFbGxlcyBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpZXMgw6AgZGlmZsOpcmVudHMgZW5kcm9pdHMgZGFucyBPcGVuUmVmaW5lIGV0IGRvaXZlbnQgdG91am91cnMgw6p0cmUgZW50b3Vyw6llcyBkZSBgLyAvYDogZmlsdHJlcywgZmFjZXR0ZXMsIGZlbsOqdHJlIEdSRUwuDQotIENlcnRhaW5lcyBleHByZXNzaW9ucyBwZXV2ZW50IHMnw6ljcmlyZSBlbiBHUkVMIGF2ZWMgb3Ugc2FucyByZWdleC4gIA0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SMzMuanBnKQ0KDQo8L2JyPg0KDQotIE1haXMgY2VydGFpbmVzIGZvbmN0aW9ucyAoY29tbWUgYG1hdGNoYCkgbidhY2NlcHRlbnQgcXVlIGNlcyBleHByZXNzaW9ucy4gIA0KPC9icj4NCg0KUG91ciBlbiBzYXZvaXIgcGx1czogIA0KLSBodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvVW5kZXJzdGFuZGluZy1SZWd1bGFyLUV4cHJlc3Npb25zICANCi0gaHR0cHM6Ly9yZWdleDEwMS5jb20vICANCg0KPC9icj4NCg0KDQoNCiMjIyBFeGVyY2ljZTogZGl2aXNlciBsZXMgw6lsw6ltZW50cyBkZSByw6lmw6lyZW5jZXMgYmlibGlvZ3JhcGhpcXVlcyBlbiBmb3JtYXQgQVBBDQoNCiFbXShpbWFnZXMvT1IzNi5qcGcpDQoNCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoxLiBBbGxlciBzdXIgbGUgW2d1aWRlIEFQQV0oaHR0cHM6Ly9iaWIudW1vbnRyZWFsLmNhL2NpdGVyL3N0eWxlcy1iaWJsaW9ncmFwaGlxdWVzL2FwYT90YWI9MzI4MSkuICAgICANCjIuIENvcGllciBsZXMgZGV1eCByw6lmw6lyZW5jZXMgZGUgTGVtYWlyZSBldCBMZWJvdmljaSBhdSBwb2ludCAyLjEuICAgICAgDQozLiBEYW5zIE9wZW5SZWZpbmUsIGNsaXF1ZXIgc3VyIGxlIHBldGl0IGxvZ28gZW4gaGF1dCDDoCBnYXVjaGUgLT4gYENyw6llciB1biBwcm9qZXRgIC0+IGBQcmVzc2UtcGFwaWVyYDogQ29sbGVyIGxlcyBkZXV4IHLDqWbDqXJlbmNlcyBlbiAgYWpvdXRhbnQgdW4gc8OpcGFyYXRldXIgKioiOyIqKiDDoCBsYSBmaW4gZGUgbGEgcHJlbWnDqHJlIC0+IFN1aXZhbnQuICAgICAgIA0KDQo0LiBNb2RpZmllciBsZXMgb3B0aW9uczogDQogIC0gTGVzIGNvbG9ubmVzIHNvbnQgc8OpcGFyw6llcyBwYXIgIjsiLiAgDQogIC0gRMOpY29jaGVyIGxhIG91IGxlcyBwcmVtacOocmVzLiAgIA0KNS4gQ3LDqWVyIHByb2pldC4gICANCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDEiPg0KNi4gYMOJZGl0ZXIgbGEgY29sb25uZSAtPiBBam91dGVyIHVuZSBjb2xvbm5lIGVuIGZvbmN0aW9uIGRlIGNldHRlIGNvbG9ubmVgICANCg0KNy4gRXhhbWluZXIgbCdpbXBhY3QgZGUgY2VzIGRldXggY29tbWFuZGVzICoqR1JFTCArIHJlZ2V4KiouIFF1J2VzdC1jZSBxdWkgc2UgcGFzc2U/DQoNCjwvYnI+DQoNCj4gYHZhbHVlLmZpbmQoL1woLio/XCkvKWAgIA0KDQo+IGB2YWx1ZS5maW5kKC9cKC4qP1wpLykuam9pbignLCcpLnJlcGxhY2UoIigiLCIgIikucmVwbGFjZSgiKSIsICIiKWAgIA0KDQo8L2JyPg0KDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgQXV0ZXVyIDogYHZhbHVlLnBhcnRpdGlvbigiKCIpWzBdYCBvdSBgdmFsdWUuc3BsaXQoIigiKVswXWAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSBBbm7DqWU6IGB2YWx1ZS5wYXJ0aXRpb24oIigiKVsyXS5wYXJ0aXRpb24oIikiKVswXWAgICBvdSBhdmVjIHJlZ2V4OiBgdmFsdWUubWF0Y2goLy4qPyhcZHs0fSkuKj8vKVswXWAuICAgIA0KICAtIENyw6llciBsYSBjb2xvbm5lIHRpdHJlOiBgdmFsdWUucGFydGl0aW9uKCIpLiIpWzJdLnBhcnRpdGlvbigiKCIpWzBdYC4gICAgICANCiAgLSBDcsOpZXIgbGEgY29sb25uZSDDqWRpdGV1cjogYHZhbHVlLnBhcnRpdGlvbigiKS4iKVsyXS5wYXJ0aXRpb24oIikuIilbMl1gLiAgICAgDQogIC0gQ3LDqWVyIGxhIGNvbG9ubmUgw6lkaXRpb246IGB2YWx1ZS5wYXJ0aXRpb24oIikuIilbMl0ucGFydGl0aW9uKCIoIilbMl0ucGFydGl0aW9uKCLDqWQiKVswXWAgb3UgYXZlYyByZWdleDogYHZhbHVlLm1hdGNoKC8uKihcZCspLiDDqWQuKi8pWzBdYC4gIA0KICAtIENyw6llciBsYSBjb2xvbm5lIHZvbHVtZTogYHZhbHVlLnBhcnRpdGlvbigidm9sLiIpWzJdLnBhcnRpdGlvbigiKSIpWzBdYCBvdSBhdmVjIHJlZ2V4OiBgdmFsdWUubWF0Y2goLy4qdm9sLiAoXGQrKS4qLylbMF1gLiAgDQpBdmVjIHJlZ2V4OiAgDQotIFN1cHByaW1lciBsZXMgbGV0dHJlcyBkdSBwcsOpbm9tOiBgdmFsdWUucmVwbGFjZSgvKFxzW0EtWl0uXHMpfChcc1tBLVpdLixccykvLCAiICIpYC4gIA0KLSBTdXBwcmltZXIgdG91dCBsZSBjb250ZW51IHNhdWYgbGVzIG5vbXMgZGUgZmFtaWxsZXM6IGB2YWx1ZS5yZXBsYWNlKC8oXHNbQS1aXS5ccyl8KFxzW0EtWl0uLFxzKXwoZXQpfCgsKS8sICIgIilgLiAgDQo8L2Rpdj4NCg0KPC9icj4NCg0KKioqDQoNCiMgMTIuIFRyYW5zcG9zaXRpb24NCg0KIyMgRXhlcmNpY2U6IHRyYW5zcG9zZXIgdW4gdGFibGVhdSBkJ2luZGljYXRldXJzIGR1IFdESQ0KPC9icj4NCg0KKipGaWNoaWVyIG9yaWdpbmFsIHTDqWzDqWNoYXJnw6kgZGUgbGEgW0JhbnF1ZSBtb25kaWFsZV0oaHR0cHM6Ly9kYXRhYmFuay5iYW5xdWVtb25kaWFsZS5vcmcvcmVwb3J0cy5hc3B4P3NvdXJjZT13b3JsZC1kZXZlbG9wbWVudC1pbmRpY2F0b3JzKSBlbiBmb3JtYXQgLmNzdiBjb21wb3PDqSBkZSA1IHBheXMgZXQgNCBpbmRpY2F0ZXVycyDDoCBsJ2hvcml6b250YWxlIGV0IDMgYW5uw6llcyDDoCBsYSB2ZXJ0aWNhbGUqKiAgDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMS5qcGcpDQoNCjwvYnI+DQoNCioqMS4gVHJhbnNwb3NlciBsZXMgZGF0ZXMgw6AgbCdob3Jpem9udGFsZSAoZm9ybWF0ICpsb25nKikqKiAgDQoNCjwvYnI+DQoNCirDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBUcmFuc3Bvc2VyIC0+IFRyYW5zcG9zZXIgbGVzIGNlbGx1bGVzIGRlIHBsdXNpZXVycyBjb2xvbm5lcyBlbiBsaWduZXMuLi4qDQoNCg0KPC9icj4NCg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTIuanBnKQ0KDQo8L2JyPg0KDQoNCiFbXShpbWFnZXMvT1ItdHJhbnNwb3NlMy5qcGcpDQoNCjwvYnI+DQoNCioqMi4gUmVtcGxpciBhdXRvbWF0aXF1ZW1lbnQgbGVzIGNlbGx1bGVzIHZpZGVzIGRlcyBkZXV4IGNvbG9ubmVzIMOgIGxhIHZlcnRpY2FsZSoqDQoNCirDiWRpdGVyIGxlcyBjZWxsdWxlcyAtPiBSZWNvcGllciBsZXMgdmFsZXVycyBkYW5zIGxlcyBjZWxsdWxlcyB2aWRlcyBjb25zw6ljdXRpdmVzKg0KDQo8L2JyPg0KDQoqKjMuIFRyYW5zcG9zZXIgbGVzIGluZGljYXRldXJzIGVuIHZhcmlhYmxlcyDDoCBsYSB2ZXJ0aWNhbGUqKg0KDQoqVHJhbnNwb3NlciAtPiBDb252ZXJ0aXIgZW4gbGlzdGUgbGVzIGNvbG9ubmVzIGRlIGNsw6kvdmFsZXVyLi4uKg0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTQuanBnKQ0KDQo8L2JyPg0KDQohW10oaW1hZ2VzL09SLXRyYW5zcG9zZTUuanBnKQ0KDQo8L2JyPg0KDQoNCioqKg0KDQojIDEzLiBFeHBvcnRlciB1biBmaWNoaWVyIGV0IGZlcm1lciBPcGVuUmVmaW5lDQoNCi0gRm9uY3Rpb24gw6AgdXRpbGlzZXIgbG9yc3F1ZSBsJ29uIGVzdCBwcsOqdCDDoCBleHBvcnRlciBzb24gZmljaGllciBlbiBkaWZmw6lyZW50cyBmb3JtYXRzIHBvdXIgdHJhdmFpbGxlciBkYW5zIHVuIGF1dHJlIGxvZ2ljaWVsICguY3N2LCAueGxzLi4uKQ0KLSBPUiBzYXV2ZWdhcmRlIGF1dG9tYXRpcXVlbWVudCBsZXMgZmljaGllcnMgc291cyBmb3JtZSBkJ2FyY2hpdmVzIGRlIHByb2pldCBkYW5zIHVuIGRvc3NpZXIgc3VyIGxlIHBvc3RlIGRlIHRyYXZhaWwgYXV4cXVlbGxlcyBvbiBwZXV0IGFjY8OpZGVyIGVuIGNsaXF1YW50IHN1ciBgT3V2cmlyIHVuIHByb2pldGAgc3VyIGxhIHBhZ2UgcHJpbmNpcGFsZS4NCi0gTCdvdXRpbCBgRXhwb3J0ZXVyIHRhYnVsYWlyZSBwZXJzb25uYWxpc8OpYCBlc3QgdHLDqHMgdXRpbGUgcG91ciBwYXJhbcOpdHJlciBsJ2V4cG9ydGF0aW9uIChzw6lsZWN0aW9uIGRlIGNvbG9ubmVzLCBmb3JtYXQgZGUgZGF0ZXMsIGZvcm1hdCBkZSBmaWNoaWVyLi4uKQ0KLSBGZXJtZXIgbCdvbmdsZXQgbmUgZmVybWUgcGFzIGxlIHNlcnZldXIgcXVpIGNvbnRpbnVlcmEgw6Agcm91bGVyIGVuIGFycmnDqHJlLXBsYW4uDQotIEFsbGVyIMOgIGxhIGZlbsOqdHJlIG5vaXJlIGR1IHRlcm1pbmFsIGV0IHV0aWxpc2VyIGxlcyB0b3VjaGVzIENUUkwgKyBDIGp1c3F1J8OgIGNlIHF1J2VsbGUgc2UgZmVybWUgZCdlbGxlLW3Dqm1lIChpbCBlc3QgcGFyZm9pcyBuw6ljZXNzYWlyZSBkZSByw6lww6l0ZXIgw6AgcGx1cyBkJ3VuZSByZXByaXNlKS4gTGUgZmljaGllciBzZXJhIGVucmVnaXN0csOpIHVuZSBkZXJuacOocmUgZm9pcyBldCBsZSBsb2dpY2llbCBzZXJhICBtYWludGVuYW50IGJlbCBldCBiaWVuIGZlcm3DqS4NCg0KPC9icj4NCg0KKioqDQoNCg0KIyAxNC4gUG91ciBmYWlyZSBkdXJlciBsZSBwbGFpc2lyIQ0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBFeHRyYWlyZSBzZXVsZW1lbnQgY2VydGFpbnMgY2FyYWN0w6hyZXMgc2Vsb24gbGV1ciBwb3NpdGlvbg0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQpFeHRyYWlyZSBzZXVsZW1lbnQgbGVzIGNhcmFjdMOocmVzIGRlIDUgw6AgNyAgDQoNCi0gdmFsdWVbNSwgN10NCg0KRXh0cmFpcmUgbGVzIGNhcmFjdMOocmVzIMOgIHBhcnRpciBkZSA1ICANCg0KLSB2YWx1ZS5zdWJzdHJpbmcoNSkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTYXZvaXIgc2kgdW5lIGNvbmRpdGlvbiBlc3QgdnJhaWUgb3UgZmF1c3NlPw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KRXN0LWNlIHF1ZSBsZSBjb250ZW51IGRlcyB2YWxldXJzIGNvcnJlc3BvbmQgw6AgIjIwMTktMDEtMDEiICANCg0KLSB2YWx1ZT09IjIwMTktMDEtMDEiDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29ubmHDrnRyZSBsYSBsb25ndWV1ciBkZXMgdmFsZXVycyBkJ3VuZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLmxlbmd0aCgpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcHRlciBsZSBub21icmUgZGUgbW90cyBkYW5zIGRlcyBjZWxsdWxlcyAoc8OpcGFyw6lzIHBhciBkZXMgZXNwYWNlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gdmFsdWUuc3BsaXQoIiAiKS5sZW5ndGgoKSBvdSB2YWx1ZS5zcGxpdCgvXHMvKS5sZW5ndGgoKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIENhbGN1bCBkJ3VuIHBvdXJjZW50YWdlIGFycm9uZGkgKGV4IGQndW4gcsOpc3VsdGF0IHN1ciAxMCkNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCi0gcm91bmQoKHZhbHVlKjEwMCkgLyAxMCkNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmFuc2Zvcm1lciB1biBmb3JtYXQgZGF0ZSBlbiBmb3JtYXQgdGV4dGUgcGx1cyBsaXNpYmxlDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQotIHZhbHVlLnRvU3RyaW5nKCJkZCBNTU1NIHl5eXkiKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBMYSBjcsOpYXRpb24gZXQgbWFuaXB1bGF0aW9uIGRlIGxpc3RlcyAoKmFycmF5KikgLSBEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpEaXZpc2VyIGxlIGNvbnRlbnUgZGUgY2VsbHVsZXMgZW4gZm9uY3Rpb24gZCd1biBzw6lwYXJhdGV1ciBwb3VyIG5lIGNvbnNlcnZlciBxdWUgbGUgcHJlbWllciDDqWzDqW1lbnQgICAgDQoNCi0gdmFsdWUuc3BsaXQoIiAiKVswXQ0KDQpEaXZpc2VyIGxlIGNvbnRlbnUgZCd1bmUgY2VsbHVsZXMgcG91ciBsZXMgcsOpb3Jkb25uZXIgDQoNCi0gdmFsdWUuc3BsaXQoIiwiKS5yZXZlcnNlKCkuam9pbigiLCIpDQoNCi0gdmFsdWUuc3BsaXQoIiwiKS5zb3J0KCkuam9pbigiLCIpDQoNCkRpdmlzZXIgYXByw6hzIGxlcyAzIHByZW1pZXJzIGNhcmFjdMOocmVzIGV0IGNvbnNlcnZlIGxlIHByZW1pZXIgw6lsw6ltZW50ICANCg0KLSB2YWx1ZS5zcGxpdEJ5TGVuZ3RocygzKVswXSANCg0KRGl2aXNlciBzZWxvbiBsZSB0eXBlIGRlIGNhcmFjdMOocmVzIGV0IHJldGVuaXIgbGUgZGV1eGnDqG1lIMOpbMOpbWVudCAgDQoNCi0gdmFsdWUuc3BsaXRCeUNoYXJUeXBlKClbMV0NCg0KRGl2aXNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUgc3VyIHVuIHRlcm1lIHggZXQgY29uc2VydmVyIGxlIGNvbnRlbnUgcHLDqWPDqWRlbnQgDQoNCi0gdmFsdWUucGFydGl0aW9uKCJ0ZXJtZSIpWzBdDQoNCi0gdmFsdWUucGFydGl0aW9uKCIgdG8gIilbMl0ucGFydGl0aW9uKCIgb24gIilbMF0NCmh0dHA6Ly93d3cuZGF2aWRodXluaC5uZXQvc3BhY2VzL25pY2FyMjAxMS90dXRvcmlhbC5wZGYNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBJbnZlcnNlciBsZSBjb250ZW51IGQndW5lIGNlbGx1bGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkRpdmlzZXIgbGUgY29udGVudSBkJ3VuZSBjZWxsdWxlIGV0IGludmVyc2VyIGwnb3JkcmUgZGUgcHLDqXNlbnRhdGlvbiBlbiBham91dGFudCB1bmUgdmlyZ3VsZSBlbnRyZSBsZXMgZGV1eCAgDQoNCi0gdmFsdWUuc3BsaXQoJyAnKVsxXSArICIsIiArICIgIiArIHZhbHVlLnNwbGl0KCcgJylbMF0NCg0KT1UNCg0KLSB2YWx1ZS5tYXRjaCgvKC4qKSwoLiopLykucmV2ZXJzZSgpLmpvaW4oIiAiKQ0KPC9kaXY+DQoNCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQWpvdXRlciB1biB6w6lybyBwb3VyIGF2b2lyIHVuIG5vbWJyZSBkZSBjYXJhY3TDqHJlcyBwcsOpY2lzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpBam91dGVyIHVuIHrDqXJvIGRldmFudCBsZSBjb250ZW51IHNpIGRvbm5lIHVuZSBjaGFpbmUgZGUgMCDDoCAyIGNhcmFjdMOocmVzICANCg0KLSAiMCJbMCwyLWxlbmd0aCh2YWx1ZSldICsgdmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBBcHBsaXF1ZXIgZGVzIGNvbmRpdGlvbnMNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkZvbmN0aW9uIGlmIC0gbcOqbWUgY2hvc2UgcXVlIGRhbnMgZXhjZWwgIA0KDQotIGlmKHRlc3QsIHNpIHRleHQgZXN0IHZyYWksIHNpIHRleHQgZXN0IHZyYWkpDQoNClNpIGxhIGNlbGx1bGUgY29udGllbnQgeCwgw6ljcmlyZSB4LCBzaW5vbiB5DQoNCi0gaWYodmFsdWUuY29udGFpbnMoIngiKSwgIngiLCAieSIpDQogDQotIGlmKHZhbHVlLmNvbnRhaW5zKCIxIiksIHZhbHVlLCBudWxsKQ0KDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgQ29tcGFyZXIgZGV1eCBjb2xvbm5lcw0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KSWRlbnRpZmllciBzaSBsZSBjb250ZW51IGRlcyBjZWxsdWxlcyBkJ3VuZSBjb2xvbm5lIGVzdCBwYXJlaWwgw6AgdW5lIGF1dHJlICANCg0KLSB2YWx1ZSA9PSBjZWxsc1snYXV0cmUtY29sb25uZSddLnZhbHVlDQoNCkVzdC1jZSBxdWUgbGUgcHJlbWllciBjYXJhY3TDqHJlIGRlIGxhIGNvbG9ubmUgeCBlc3QgbGUgbcOqbWUgcXVlIGxhIGNvbG9ubmUgeSAgDQoNCi0gY2VsbHNbImNvbG9ubmUxIl0udmFsdWVbMF0gPT0gY2VsbHNbImNvbG9ubmUyIl0udmFsdWVbMF0NCg0KQ29tcGFyZXIgbGUgY29udGVudSBkZSBkZXV4IGNvbG9ubmVzIGV0IG1vZGlmaWVyIGxlcyB2YWxldXJzIHNlbG9uIGxlIHLDqXN1bHRhdCBkZSBsYSBjb25kaXRpb24gIA0KDQotIGlmKGNlbGxzWyJjb2xvbm5lMSJdLnZhbHVlID09IGNlbGxzWyJjb2xvbm5lMiJdLnZhbHVlLCAiUGFyZWlsIiwgIlBhcyBwYXJlaWwiKQ0KPC9kaXY+DQoNCjwvYnI+DQoNCjxkaXYgY2xhc3MgPSAiYm94MiI+DQojIyMjIFbDqXJpZmllciBsZSBmb3JtYXQgZCd1bmUgY29sb25uZQ0KPC9kaXY+DQo8ZGl2IGNsYXNzID0gImJveDEiPg0KDQotIHZhbHVlLnR5cGUoKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQoNCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgRmFpcmUgZGVzIGNhbGN1bHMgc2ltcGxlcyAodmFsZXVycyBudW3DqXJpcXVlcykNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KU29tbWUgZCd1bmUgY29sb25uZSBwbHVzIHVuZSBhdXRyZSAgDQoNCi0gdmFsdWUgKyBjZWxsc1snSm91ciBkdSBtb2lzJ10udmFsdWUNCg0KQXJyb25kaXIgbGUgY29udGVudSAgDQoNCi0gcm91bmQodmFsdWUpDQo8L2Rpdj4NCg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZXByZW5kcmUgZXQgY29uY2F0w6luZXIgbGUgY29udGVudSBkJ3VuZSBhdXRyZSBjb2xvbm5lDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQpDcsOpZXIgdW5lIG5vdXZlbGxlIGNvbG9ubmUgZW4gZnVzaW9ubmFudCBsZSBjb250ZW51IGRlIGRldXggYXV0cmVzIGV0IGFqb3V0ZXIgZHUgdGV4dGUgIA0KDQotIGNlbGxzWydub20nXS52YWx1ZSArIGNlbGxzWydub20nXS52YWx1ZSArICJCb25qb3VyISINCg0KQ3LDqWVyIHVuZSBub3V2ZWxsZSBjb2xvbm5lIGF2ZWMgbGVzIHRyb2lzIHByZW1pZXJzIGNhcmFjdMOocmVzIHNldWxlbWVudCAgDQoNCi0gY2VsbHNbJ1N5bXB0b21lJ10udmFsdWVbMCwzXQ0KDQotIFRyYW5zZm9ybWVyIGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSBlbiBjb25jYXTDqW5hbnQgbGUgY29udGVudSBkJ3VuZSBhdXRyZSAgDQoNCnZhbHVlICsgJyAnICsgY2VsbHNbJ3N0cmVldC10eXBlJ10udmFsdWUNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBSZW1wbGFjZXIgZGVzIGNhcmFjdMOocmVzDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNClJlbXBsYWNlciB0b3V0IGxlIGNvbnRlbnUgZCd1bmUgY29sb25uZSAoaWNpLCB2aWRlciBsYSBjb2xvbm5lKSAgDQoNCi0gdmFsdWUucmVwbGFjZSh2YWx1ZSwgIiIpDQoNClJlbXBsYWNlciB1bmUgbGV0dHJlIHBhciB1bmUgYXV0cmUgIA0KDQotIHZhbHVlLnJlcGxhY2VDaGFycygibyIsICJhIikNCg0KRmFpcmUgcGx1c2lldXJzIHJlbXBsYWNlbWVudHMgZCd1biBjb3VwICANCg0KLSB2YWx1ZS5yZXBsYWNlKCIxIiwgInVuIikucmVwbGFjZSgiMiIsICJkZXV4IikucmVwbGFjZSgiMyIsICJ0cm9pcyIpDQo8L2Rpdj4NCg0KPC9icj4NCg0KPGRpdiBjbGFzcyA9ICJib3gyIj4NCiMjIyMgSWRlbnRpZmllciBkZXMgY2VsbHVsZXMgcXVpIGNvbW1lbmNlbnQgcGFyLi4uIChyw6lzdWx0YXQgYm9vbMOpZW4pDQo8L2Rpdj4NCjxkaXYgY2xhc3MgPSAiYm94MSI+DQoNCi0gdmFsdWUuc3RhcnRzV2l0aCgiQmVycmkiKSAgDQoNCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBTdXBwcmltZXIgdW4gY2FyYWN0w6hyZSBkZSBkw6lidXQgb3UgZmluIGRlIHZhbGV1cjoNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCg0KKipTdXBwcmltZSDigJxT4oCdIGR1IGTDqWJ1dCBkZSBsYSBjZWxsdWxlICAqKg0KDQotIHZhbHVlLnJlcGxhY2UoL15TLywiIikgW3JlZ2V4IF4gaW5kaXF1ZSBsZSBkw6lidXQgZCd1bmUgY2VsbHVsZV0NCg0KKipTdXBwcmltZSAiLiIgw6AgbGEgZmluIGRlIGxhIGNlbGx1bGUgICoqDQoNCi0gdmFsdWUucmVwbGFjZSgvXC4kLywiIikgW3JlZ2V4ICQgaW5kaXF1ZSBsYSBmaW4gZCd1bmUgY2VsbHVsZV0NCjwvZGl2Pg0KDQo8L2JyPg0KDQo8ZGl2IGNsYXNzID0gImJveDIiPg0KIyMjIyBUcmF2YWlsbGVyIGF2ZWMgdW4gZm9ybWF0IGRhdGUNCjwvZGl2Pg0KPGRpdiBjbGFzcyA9ICJib3gxIj4NCkV4dHJhaXJlIHNldWxlbWVudCB1bmUgcGFydGllIGQndW5lIGRhdGUgIA0KDQotIHZhbHVlLnRvRGF0ZSgpLmRhdGVQYXJ0KCJ5ZWFyIikgIA0KDQotICBkaWZmKG5vdygpLHZhbHVlLCd3ZWVrcycpICANCg0KPC9kaXY+DQoNCg0KKioqDQoNCjwvYnI+DQoNCiMgMTUuIFJlc3NvdXJjZXMNCg0KLSBbU2l0ZSBldCBkb2N1bWVudGF0aW9uIG9mZmljaWVsc10oaHR0cHM6Ly9vcGVucmVmaW5lLm9yZy8pDQoNCi0gSm9obiBMaXR0bGUsIDIwMTgsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9saWJqb2huLmdpdGh1Yi5pby9vcGVucmVmaW5lL2luZGV4Lmh0bWwpICANCg0KLSBFdmFuIFdpbGwsIDIwMjEsIFtHZXQgU3RhcnRlZCB3aXRoIE9wZW5SZWZpbmU6IEV4cGxvcmUsIENsZWFuLCBhbmQgVHJhbnNmb3JtIHlvdXIgRGF0YSFdKGh0dHBzOi8vZXZhbndpbGwuZ2l0aHViLmlvL29wZW5yZWZpbmUtYi8pICANCg0KLSBVQ0xBLCAyMDE5LCBbR2V0dGluZyBzdGFydGVkIHdpdGggT3BlblJlZmluZSBEaWdpdGFsIEh1bWFuaXRpZXMgMjAxXShodHRwOi8vbWlyaWFtcG9zbmVyLmNvbS9jbGFzc2VzL2RoMjAxdzE5L3R1dG9yaWFscy1ndWlkZXMvZGF0YS1jbGVhbmluZy1hbmQtbWFuaXB1bGF0aW9uL2dldHRpbmctc3RhcnRlZC13aXRoLW9wZW5yZWZpbmUvKQ0KDQotIFtSZWZpbmVQcm8gS25vd2xlZGdlIEJhc2UgZm9yIE9wZW5SZWZpbmVdKGh0dHBzOi8va2IucmVmaW5lcHJvLmNvbS8pDQoNCi0gU2V0aCB2YW4gSG9vbGFuZCwgUnViZW4gVmVyYm9yZ2gsIGFuZCBNYXggRGUgV2lsZGUsIFtDbGVhbmluZyBEYXRhIHdpdGggT3BlblJlZmluZV0oaHR0cHM6Ly9wcm9ncmFtbWluZ2hpc3Rvcmlhbi5vcmcvZW4vbGVzc29ucy9jbGVhbmluZy1kYXRhLXdpdGgtb3BlbnJlZmluZSkNCg0KLSBbSW50cm9kdWN0aW9uIHRvIE9wZW5SZWZpbmVdKGh0dHBzOi8vZG9hbmEuZ2l0Ym9va3MuaW8vdGVzdC9jb250ZW50LykNCg0KLSBEYXRhIENhcnBlbnRyeSwgW0RhdGEgQ2xlYW5pbmcgd2l0aCBPcGVuUmVmaW5lIGZvciBFY29sb2dpc3RzXShodHRwczovL2RhdGFjYXJwZW50cnkub3JnL09wZW5SZWZpbmUtZWNvbG9neS1sZXNzb24vMDAtZ2V0dGluZy1zdGFydGVkL2luZGV4Lmh0bWwpDQoNCi0gT3dlbiBTdGVwaGVucywgMjAxNCwgW0ludHJvZHVjdGlvbiB0byBPcGVuUmVmaW5lXShodHRwOi8vd3d3Lm1lYW5ib3lmcmllbmQuY29tL292ZXJkdWVfaWRlYXMvd3AtY29udGVudC91cGxvYWRzLzIwMTQvMTEvSW50cm9kdWN0aW9uLXRvLU9wZW5SZWZpbmUtaGFuZG91dC1DQy1CWS5wZGYpDQoNCi0gVmVyYm9yZ2ggZXQgRGUgV2lsZGUsIDIwMTMsIFtVc2luZyBPcGVuUmVmaW5lXShodHRwczovL3d3dy5nYmlmLmVzL3dwLWNvbnRlbnQvdXBsb2Fkcy8yMDE4LzAxL1VzaW5nLU9wZW5SZWZpbmVCb29rLnBkZikNCg0KLSBbTGlicmFyeSBDYXJwZW50cnk6IE9wZW5SZWZpbmVdKGh0dHBzOi8vbGlicmFyeWNhcnBlbnRyeS5vcmcvbGMtb3Blbi1yZWZpbmUvMDEtaW50cm9kdWN0aW9uL2luZGV4Lmh0bWwpDQoNCi0gW0dyYXRlZnVsIERhdGFdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dHl0aGVyZWQvZ3JhdGVmdWxkYXRhL3dpa2kpICANCg0KLSBbR1JFTCBSZWNpcGVzXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvUmVjaXBlcykNCg0KLSBbQ2hlYXQgU2hlZXQ6IFJlZ3VsYXIgRXhwcmVzc2lvbnMgJiBHUkVMXShodHRwczovL2NvZGU0bGlidG9yb250by5naXRodWIuaW8vMjAxOC0xMC0xMi1hY2Nlc3MvR29vZ2xlUmVmaW5lQ2hlYXRTaGVldHMucGRmKQ0KDQotIFtFdGMhXShodHRwczovL2dpdGh1Yi5jb20vT3BlblJlZmluZS9PcGVuUmVmaW5lL3dpa2kvRXh0ZXJuYWwtUmVzb3VyY2VzKQ0KDQoNCjxzdHlsZT4NCi5yaWdodCB7DQogZmxvYXQ6IHJpZ2h0Ow0KfQ0KDQouY2VudGVyIHsNCiBhbGlnbjogY2VudGVyOw0KfQ0KDQoubm90ZSB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBib3JkZXItc3R5bGU6IHNvbGlkOw0KICBib3JkZXItY29sb3I6IGdyZWVuOw0KICBib3JkZXItd2lkdGg6IHRoaW47DQogIGZvbnQtc2l6ZTogOTAlOw0KICBib3JkZXItcmFkaXVzOiAxMHB4Ow0KfQ0KDQouYm94MSB7DQogIHBhZGRpbmc6IDAuNWVtOw0KICBiYWNrZ3JvdW5kOiAjZTBlYmViOw0KICBjb2xvcjogYmxhY2s7DQogIGJvcmRlci1yYWRpdXM6IDEwcHg7DQp9DQoNCi5ib3gyIHsNCiAgcGFkZGluZzogMC41ZW07DQogIGJhY2tncm91bmQ6ICM5MmI5Yjk7DQogIGNvbG9yOiB3aGl0ZTsNCiAgYm9yZGVyLXJhZGl1czogMTBweDsNCn0NCi5jZW50ZXIgew0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQoNCi50aXRsZSB7DQogIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgY29sb3I6ICMwMDMzNjY7DQp9DQoNCi5zdWJ0aXRsZSB7DQogIGNvbG9yOiAjMDAzMzY2Ow0KfQ0KDQpoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBsZWdlbmQgew0KICBjb2xvcjogIzVBN0I5QzsNCn0NCg0KPC9zdHlsZT4=